我找到了一些在shell中列出集合的答案,但我在nodejs脚本中列出集合的所有答案似乎都已弃用,collectionNames
和moongose.connection.db
等答案已经没办法。
答案 0 :(得分:45)
在node.js的2.0版MongoDB驱动程序中,您可以使用listCollections
来获取包含所有集合信息的游标。然后,您可以在光标上调用toArray
来检索信息。
db.listCollections().toArray(function(err, collInfos) {
// collInfos is an array of collection info objects that look like:
// { name: 'test', options: {} }
});
答案 1 :(得分:6)
这是一个完整的示例,说明如何使用3.4版的Mongo节点驱动程序进行操作
const MongoClient = require("mongodb").MongoClient;
// Connection url
var url = 'mongodb://localhost:27017/test';
const client = new MongoClient(url, { useUnifiedTopology: true }); // { useUnifiedTopology: true } removes connection warnings;
const dbName = "test";
client
.connect()
.then(
client =>
client
.db(dbName)
.listCollections()
.toArray() // Returns a promise that will resolve to the list of the collections
)
.then(cols => console.log("Collections", cols))
.finally(() => client.close());
答案 2 :(得分:0)
如果您有权访问async/await
,则在迭代器上承诺toArray
而不使用回调更为干净。
static toArray(iterator) {
return new Promise((resolve, reject) => {
iterator.toArray((err, res) => {
if (err) {
reject(err);
} else {
resolve(res);
}
});
});
}
const myArray = await toArray(db.listCollections());
答案 3 :(得分:0)
const collections = Object.keys(mongoose.connection.collections);
这为您提供了集合的JSON文档。
答案 4 :(得分:0)
var resource=[];
var ob=db.getSiblingDB('working_db');
ob.getCollectionNames().forEach(function(doc){
var regex = /^word|word1|word2|word3/i;
var found = doc.match(regex);
if(found){
printjson(doc)
resource.push({ resource: { db: "working_db", collection: doc }, actions: [ "insert","find","remove","update"] })
}
});
regex 用于获取我们需要列出的集合前缀名称中的特定特定单词,如果您不需要,则将其删除。 这对于从庞大的集合列表中授予特定于集合的权限非常有用。
use admin,
db.createRole(
{
role: "ROLE_NAME",
privileges: resource,
roles: [
{
role: "clusterMonitor",
db: "admin"
}
]
}
)