提问者:小点点

无法删除带有nodejs的MongoDB中的任何文档


我想创建一个脚本,它将删除集合中的文档,但保留集合本身(只需在集合中创建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();
        }
    }

});

还有,有一种方法,有一个脚本将删除多个集合中的所有文档? 我可以像声明数组一样声明集合吗?


共1个答案

匿名用户

在上面的代码中,函数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();
  }
})();