从MongooseJS 5.x获取MongoDB中的当前集合



我正在做一个演示项目,每小时重置我的mongodb集合。我知道如何在我的节点项目中使用cron。我不知道的是如何获得集合名称。我看过其他解决方案,但似乎在早期版本的mongoose中有一种方法,但V5没有。

console.log(mongoose.connection.db) // Undefined

所以,基本上,我希望能够获得当前集合的数组,以编程方式删除它们并重新播种数据库。

async function reloadDb(){
// Get collection names
const collectionNames = await mongoose.connection.db    //undefined but I want array
// Map through results....
{...}
}

在类似的情况下,我总是尽可能低,例如,直接使用MongoDB客户端,并删除集合大约像这样,(这个答案适用于删除,不太清楚是否需要删除或清除集合):

const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient
const connectionURL = 'mongodb://localhost'
const client = new MongoClient(connectionURL, { useNewUrlParser: true, useUnifiedTopology: true });
const drop = async (databaseName) => {
await client.connect().then(() => {
const db = client.db(databaseName);
const collections = db.listCollections();
collections.forEach(element => {
db.dropCollection(element.name);
});
}).catch(error => {
console.log("ERROR:", error) // or some logger
})
}
exports.drop = drop;

您可以使用Object.keys(mongoose.connection.collections);获取集合

此外,要以编程方式重置DB,可以遍历每个集合:

const collections = mongoose.connection.collections;
for (const key in collections) {
const collection = collections[key];
await collection.deleteMany();
}

最新更新