一尘不染

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

node.js

我需要使用猫鼬插入一些数据,但是集合的名称由用户在插入时提供,因此我首先必须检查集合是否存在。

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

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

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

1写完这个后,我将尝试数字。我刚刚检查了一下system.namespaces,该架构看起来非常简单

我仍然想听听一些意见。

谢谢!


阅读 223

收藏
2020-07-07

共1个答案

一尘不染

选项2可能是最干净的。假设您已经使用打开了一个Connection名为Mongoose的对象,则可以通过访问本地mongo
对象。从那里您可以打电话给应该提供您所寻找的东西:conn``mongoose.createConnection``Db``conn.dbcollectionNames

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接受过滤器并返回游标,因此您可以这样做:

mongoose.connection.db.listCollections({name: 'mycollectionname'})
    .next(function(err, collinfo) {
        if (collinfo) {
            // The collection exists
        }
    });
2020-07-07