我想创建一个脚本,它将删除集合中的文档,但保留集合本身(只需在集合中创建0个文档)。 当我用node运行脚本时,它只是运行,但根本没有做任何事情。 没有错误。
代码:
var mongoClient = require('mongodb').MongoClient;
var url = 'mongodb+srv://username:password@cluster0-1kunr.mongodb.net/<dbname>?retryWrites=true&w=majority';
mongoClient.connect(url, { useUnifiedTopology: true }, function(err, db) {
if (err) {
console.log('Sorry unable to connect to MongoDB Error:', err);
} else {
async function deleteListingsScrapedBeforeDate() {
result = await client.db("CryptoCurrencies").collection("who")
.remove({});
console.log(`${result.deletedCount} document(s) was/were deleted.`);
await deleteListingsScrapedBeforeDate();
}
}
});
还有,有一种方法,有一个脚本将删除多个集合中的所有文档? 我可以像声明数组一样声明集合吗?
在上面的代码中,函数DeleteListingsScrapedBeforeDate()
实际上从未被调用(同样,如果被调用,这将导致无止境的递归)。 您应该将其更改为:
const MongoClient = require('mongodb').MongoClient;
async function deleteListingsScrapedBeforeDate(db) {
await db.collection("who").remove({});
console.log(`${result.deletedCount} document(s) was/were deleted.`);
}
(async function() {
const url = 'mongodb+srv://username:password@cluster0-1kunr.mongodb.net/<dbname>?retryWrites=true&w=majority';
const dbName = '<dbname>';
let client;
try {
client = await MongoClient.connect(url);
const db = client.db(dbName);
await deleteListingsScrapedBeforeDate(db);
} catch (err) {
console.log(err.stack);
}
if (client) {
client.close();
}
})();