在nodejs脚本中的mongo数据库中列出所有集合

时间:2015-05-26 23:00:03

标签: node.js mongodb collections

我找到了一些在shell中列出集合的答案,但我在nodejs脚本中列出集合的所有答案似乎都已弃用,collectionNamesmoongose.connection.db等答案已经没办法。

5 个答案:

答案 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"
        }
      ]
    }
  )