我需要使用猫鼬插入一些数据,但是集合的名称由用户在插入时提供,因此我首先必须检查集合是否存在。
我知道如何检查集合是否存在的方式是通过查询system.namespaces集合。我可以看到3种可行的方法。
system.namespaces
Number 3是最不优雅的数字,也是我要避免的数字,我不想加载该驱动程序的另一个实例,也不想在mongoose已经创建一个实例时创建一个新的连接。
3
1写完这个后,我将尝试数字。我刚刚检查了一下system.namespaces,该架构看起来非常简单
1
我仍然想听听一些意见。
谢谢!
选项2可能是最干净的。假设您已经使用打开了一个Connection名为Mongoose的对象,则可以通过访问本地mongo 对象。从那里您可以打电话给应该提供您所寻找的东西:conn``mongoose.createConnection``Db``conn.dbcollectionNames
Connection
conn``mongoose.createConnection``Db``conn.db
collectionNames
conn.db.collectionNames(function (err, names) { // names contains an array of objects that contain the collection names });
您还可以将集合名称作为参数传递,collectionNames以将结果过滤为所需的内容。
猫鼬4.x更新
在Mongoose 4.x使用的2.x版本的MongoDB本机驱动程序中,collectionNames已被替换为listCollections接受过滤器并返回游标,因此您可以这样做:
listCollections
mongoose.connection.db.listCollections({name: 'mycollectionname'}) .next(function(err, collinfo) { if (collinfo) { // The collection exists } });