web-dev-qa-db-ja.com

nodejsスクリプト内のmongoデータベースのすべてのコレクションを一覧表示する

シェルでコレクションを一覧表示するためのいくつかの回答を見つけましたが、nodejsスクリプトでコレクションを一覧表示するために見つけたすべての回答は廃止されているようです。collectionNamesmoongose.connection.db returnなどの回答にはメソッドがありません。

23
Jake

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: {} }
});
55
JohnnyHK

これは、ノード用のMongoドライバーのバージョン3.4でそれを行う方法の完全な例です。

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());

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());
0
Steven Spungin