gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:04:06 24 4
gpt4 key购买 nike

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

我知道如何检查集合是否存在的方法是查询 system.namespaces 集合。我可以看到 3 种可能的方法来做到这一点。

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

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

写完后我要试试数字1。我刚刚检查了 system.namespaces,架构看起来很简单

我还是想听听一些意见。

谢谢!

最佳答案

选项 2 可能是最干净的。假设您有一个名为 conn 的 Mongoose Connection 对象,该对象已使用 mongoose.createConnection 打开,您可以访问 native mongo Db 对象通过 conn.db。从那里您可以调用collectionNames这应该提供您正在寻找的内容:

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

您还可以将集合名称作为参数传递给 collectionNames 以将结果过滤为您正在寻找的内容。

Mongoose 4.x 更新

在 Mongoose 4.x 使用的 MongoDB 原生驱动的 2.x 版本中,collectionNames 已被 listCollections 替换它接受一个过滤器并返回一个游标,所以你可以这样做:

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

关于Node.js - Mongoose - 检查集合是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com