在Node.js脚本中列出Mongo数据库中的所有集合

37

我在shell中找到了一些列出集合的答案,但我发现所有在nodejs脚本中列出集合的答案似乎都被弃用了,像collectionNamesmoongose.connection.db等答案会返回没有方法。

6个回答

84
在Node.js的MongoDB驱动程序2.0版本中,您可以使用listCollections获取包含所有集合信息的游标。然后,您可以调用游标上的toArray函数来检索信息。
db.listCollections().toArray(function(err, collInfos) {
    // collInfos is an array of collection info objects that look like:
    // { name: 'test', options: {} }
});

2
你真是个救命稻草,因为有太多过时的信息在那里。之前你不是还很专业地回答了我的一个问题吗?如果可以的话,我会给你加上5分的。 - Jake

17

以下是如何使用 Node.js 的 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());

3
如果您可以使用 async/await,那么将迭代器的 toArray 转换为 Promise 更加简洁,而不必使用回调函数。
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());

toArray 定义的行中,我得到了 Expected ";" but found "toArray" - Timo

1
   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"] })
        }
    });

正则表达式用于获取需要列出的集合前缀名称中的特定单词,如果不需要,请将其删除。对于从大量集合中授予集合特定权限非常有用。
use admin,
db.createRole(
    {
      role: "ROLE_NAME",
      privileges: resource,
      roles: [
        {
          role: "clusterMonitor",
          db: "admin"
        }
      ]
    }
  )

1
const collections = Object.keys(mongoose.connection.collections); 

这将为您提供一个关于您的集合的JSON文档。

0

使用nodejs从mongoDB获取特定数据库中所有集合的列表

  1. 首先,您需要连接到该特定的数据库
  2. 获取包含该数据库中每个集合信息的列表
const myDb = mongoose.connection.useDb(<databaseName>);
let collList = await myDb.db.listCollections().toArray();

collList = collList.map(el => {
      return el.name;
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接