// GetCollection is part of the Database interface. func (db *database) GetCollection(name string) (collection mongo.Collection, closer SessionCloser) { info, found := db.schema[name] if !found { logger.Errorf("using unknown collection %q", name) } // Copy session if necessary. if db.ownSession { collection = mongo.WrapCollection(db.raw.C(name)) closer = dontCloseAnything } else { collection, closer = mongo.CollectionFromName(db.raw, name) } // Apply model filtering. if !info.global { collection = &modelStateCollection{ WriteCollection: collection.Writeable(), modelUUID: db.modelUUID, } } // Prevent layer-breaking. if !info.rawAccess { // TODO(fwereade): it would be nice to tweak the mongo.Collection // interface a bit to drop Writeable in this situation, but it's // not convenient yet. } return collection, closer }
// getCollectionFromDB returns the specified collection from the given // database. // // An environment UUID must be provided so that environment filtering // can be automatically applied if the collection stores data for // multiple environments. func getCollectionFromDB(db *mgo.Database, name, envUUID string) mongo.Collection { collection := mongo.WrapCollection(db.C(name)) return newStateCollection(collection, envUUID) }