in nimo-shake/common/mongodb_mgo.go [118:151]
func (conn *MongoConn) HasUniqueIndex() bool {
checkNs := make([]NS, 0, 128)
var databases []string
var err error
if databases, err = conn.Session.DatabaseNames(); err != nil {
LOG.Critical("Couldn't get databases from remote server %v", err)
return false
}
for _, db := range databases {
if db != "admin" && db != "local" {
coll, _ := conn.Session.DB(db).CollectionNames()
for _, c := range coll {
if c != "system.profile" {
// push all collections
checkNs = append(checkNs, NS{Database: db, Collection: c})
}
}
}
}
for _, ns := range checkNs {
indexes, _ := conn.Session.DB(ns.Database).C(ns.Collection).Indexes()
for _, idx := range indexes {
// has unique index
if idx.Unique {
LOG.Info("Found unique index %s on %s.%s in auto shard mode", idx.Name, ns.Database, ns.Collection)
return true
}
}
}
return false
}