Godeps/_workspace/src/gopkg.in/mgo.v2/session.go
func (db *Database) CollectionNames() (names []string, err error) {
	// Clone session and set it to Monotonic mode so that the server
	// used for the query may be safely obtained afterwards, if
	// necessary for iteration when a cursor is received.
	session := db.Session
	cloned := session.Clone()
	cloned.SetMode(Monotonic, false)
	defer cloned.Close()

	batchSize := int(cloned.queryConfig.op.limit)

	// Try with a command.
	var result struct {
		Collections []bson.Raw

		Cursor struct {
			FirstBatch []bson.Raw "firstBatch"
			NS         string
			Id         int64
		}
	}
	err = db.With(cloned).Run(bson.D{{"listCollections", 1}, {"cursor", bson.D{{"batchSize", batchSize}}}}, &result)
	if err == nil {
		firstBatch := result.Collections
		if firstBatch == nil {
			firstBatch = result.Cursor.FirstBatch
		}
		var iter *Iter
		ns := strings.SplitN(result.Cursor.NS, ".", 2)
		if len(ns) < 2 {
			iter = db.With(cloned).C("").NewIter(nil, firstBatch, result.Cursor.Id, nil)
		} else {
			iter = cloned.DB(ns[0]).C(ns[1]).NewIter(nil, firstBatch, result.Cursor.Id, nil)
		}
		var coll struct{ Name string }
		for iter.Next(&coll) {
			names = append(names, coll.Name)
		}
		if err := iter.Close(); err != nil {
			return nil, err
		}
		sort.Strings(names)
		return names, err
	}
	if err != nil && !isNoCmd(err) {
		return nil, err
	}

	// Command not yet supported. Query the database instead.
	nameIndex := len(db.Name) + 1
	iter := db.C("system.namespaces").Find(nil).Iter()
	var coll struct{ Name string }
	for iter.Next(&coll) {
		if strings.Index(coll.Name, "$") < 0 || strings.Index(coll.Name, ".oplog.$") >= 0 {
			names = append(names, coll.Name[nameIndex:])
		}
	}
	if err := iter.Close(); err != nil {
		return nil, err
	}
	sort.Strings(names)
	return names, nil
}
func (db *Database) CollectionNames() (names []string, err error) {
	// Clone session and set it to Monotonic mode so that the server
	// used for the query may be safely obtained afterwards, if
	// necessary for iteration when a cursor is received.
	session := db.Session
	cloned := session.Clone()
	cloned.SetMode(Monotonic, false)
	defer cloned.Close()

	batchSize := int(cloned.queryConfig.op.limit)

	// Try with a command.
	var result struct {
		Collections []bson.Raw

		Cursor struct {
			FirstBatch []bson.Raw "firstBatch"
			NS         string
			Id         int64
		}
	}
	err = db.With(cloned).Run(bson.D{{"listCollections", 1}, {"cursor", bson.D{{"batchSize", batchSize}}}}, &result)
	if err == nil {
		firstBatch := result.Collections
		if firstBatch == nil {
			firstBatch = result.Cursor.FirstBatch
		}
		var iter *Iter
		ns := strings.SplitN(result.Cursor.NS, ".", 2)
		if len(ns) < 2 {
			iter = db.With(cloned).C("").NewIter(nil, firstBatch, result.Cursor.Id, nil)
		} else {
			iter = cloned.DB(ns[0]).C(ns[1]).NewIter(nil, firstBatch, result.Cursor.Id, nil)
		}
		var coll struct{ Name string }
		for iter.Next(&coll) {
			names = append(names, coll.Name)
		}
		if err := iter.Close(); err != nil {
			return nil, err
		}
		sort.Strings(names)
		return names, err
	}
	if err != nil && !isNoCmd(err) {
		return nil, err
	}

	// Command not yet supported. Query the database instead.
	nameIndex := len(db.Name) + 1
	iter := db.C("system.namespaces").Find(nil).Iter()
	var coll struct{ Name string }
	for iter.Next(&coll) {
		if strings.Index(coll.Name, "$") < 0 || strings.Index(coll.Name, ".oplog.$") >= 0 {
			names = append(names, coll.Name[nameIndex:])
		}
	}
	if err := iter.Close(); err != nil {
		return nil, err
	}
	sort.Strings(names)
	return names, nil
}
func ( db * Database ) CollectionNames ( ) ( names [ ] string , err error ) { // Clone session and set it to Monotonic mode so that the server // used for the query may be safely obtained afterwards, if // necessary for iteration when a cursor is received. session := db . Session cloned := session . Clone ( ) cloned . SetMode ( Monotonic , false ) defer cloned . Close ( ) batchSize := int ( cloned . queryConfig . op . limit ) // Try with a command. var result struct { Collections [ ] bson . Raw Cursor struct { FirstBatch [ ] bson . Raw " " NS string Id int64 } } err = db . With ( cloned ) . Run ( bson . D { { " " , 1 } , { " " , bson . D { { " " , batchSize } } } } , & result ) if err == nil { firstBatch := result . Collections if firstBatch == nil { firstBatch = result . Cursor . FirstBatch } var iter * Iter ns := strings . SplitN ( result . Cursor . NS , " " , 2 ) if len ( ns ) < 2 { iter = db . With ( cloned ) . C ( " " ) . NewIter ( nil , firstBatch , result . Cursor . Id , nil ) } else { iter = cloned . DB ( ns [ 0 ] ) . C ( ns [ 1 ] ) . NewIter ( nil , firstBatch , result . Cursor . Id , nil ) } var coll struct { Name string } for iter . Next ( & coll ) { names = append ( names , coll . Name ) } if err := iter . Close ( ) ; err != nil { return nil , err } sort . Strings ( names ) return names , err } if err != nil && ! isNoCmd ( err ) { return nil , err } // Command not yet supported. Query the database instead. nameIndex := len ( db . Name ) + 1 iter := db . C ( " " ) . Find ( nil ) . Iter ( ) var coll struct { Name string } for iter . Next ( & coll ) { if strings . Index ( coll . Name , " " ) < 0 || strings . Index ( coll . Name , " " ) >= 0 { names = append ( names , coll . Name [ nameIndex : ] ) } } if err := iter . Close ( ) ; err != nil { return nil , err } sort . Strings ( names ) return names , nil }
// CollectionNames returns the collection names present in the db database.
CollectionNames returns the collection names present in the db database .