シェルでコレクションを一覧表示するためのいくつかの回答を見つけましたが、nodejsスクリプトでコレクションを一覧表示するために見つけたすべての回答は廃止されているようです。collectionNames
やmoongose.connection.db
returnなどの回答にはメソッドがありません。
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: {} }
});
これは、ノード用の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());