Node.js - Mongoose - 检查集合是否存在

Jua*_*mpa 24 mongoose mongodb node.js

我需要使用mongoose插入一些数据,但是集合的名称是由用户在插入时提供的,所以我首先要检查集合是否存在.

我知道如何检查集合是否存在的方式是查询system.namespaces集合.我可以看到3种可行的方法.

  1. 找到一种system.namespaces使用mongoose 查询的方法(可能定义与db中的模式匹配的模式).
  2. 从mongoose获取一些底层node-mongodb-native对象并手动执行查询.无论如何,这是我想学习的方法.
  3. 使用node-mongodb-native(或其他一些驱动程序)的单独实例来执行查询

3是最不优雅的,也是我想要避免的,我不想加载驱动程序的另一个实例,也不想在mongoose创建一个时创建新的连接.

1写完这篇文章之后我会尝试编号.我刚刚检查过system.namespaces,架构看起来很简单

我还是想听听一些意见.

谢谢!

Joh*_*yHK 34

选项2可能是最干净的.假设您有一个Connection名为conn已打开的Mongoose 对象mongoose.createConnection,您可以通过访问本机mongo Db对象conn.db.从那里你可以打电话给collectionNames哪个应该提供你想要的东西:

conn.db.collectionNames(function (err, names) {
    // names contains an array of objects that contain the collection names
});
Run Code Online (Sandbox Code Playgroud)

您还可以将集合名称作为参数传递,collectionNames以将结果过滤到您正在查找的内容.

Mongoose 4.x更新

在Mongoose 4.x使用的2.x版本的MongoDB本机驱动程序中,collectionNames已被替换为listCollections接受过滤器并返回游标,因此您将执行以下操作:

mongoose.connection.db.listCollections({name: 'mycollectionname'})
    .next(function(err, collinfo) {
        if (collinfo) {
            // The collection exists
        }
    });
Run Code Online (Sandbox Code Playgroud)