mongodb中的deleteMany()不删除文档

Vik*_*ram 2 database mongodb node.js mongodb-query

我在集合列表中有以下记录

db.ilists.find()

{ "_id" : ObjectId("5efb10f25372d01d549954b1"), "name" : "hello user", "__v" : 0 }
{ "_id" : ObjectId("5efb10f25372d01d549954b2"), "name" : "click + to add items to the list", "__v" : 0 }
{ "_id" : ObjectId("5efb10f25372d01d549954b3"), "name" : "<---click the checkbox to deletet item in the list", "__v" : 0 }
{ "_id" : ObjectId("5efb170a32b1290c64950999"), "__v" : 0 }
{ "_id" : ObjectId("5efb17790d9ff700204c43c2"), "__v" : 0 }
Run Code Online (Sandbox Code Playgroud)

我有两个空文档,我正在使用 deleteMany 删除它们,但我得到以下信息

> db.ilists.deleteMany({"_id":"5efb170a32b1290c64950999"},{"_id":"5efb17790d9ff700204c43c2"})
{ "acknowledged" : true, "deletedCount" : 0 }
Run Code Online (Sandbox Code Playgroud)

如您所见,已删除计数为 0,并且那些文档没有被删除,对此有什么帮助吗?

小智 5

根据文档deleteMany期望过滤器查询作为第一个参数。在您的情况下,由于第一个参数确实看起来像一个查询,因此它没有按预期工作。

您可以尝试使用以下方法:

db.ilists.remove( { _id : { $in: [
    ObjectId("5efb170a32b1290c64950999"), 
    ObjectId("5efb17790d9ff700204c43c2"), 
] } } );
Run Code Online (Sandbox Code Playgroud)

或者,如果您计划删除所有空文档,您可以deleteMany按如下方式更新查询:

db.ilists.deleteMany({ name: {$exists: false} })
Run Code Online (Sandbox Code Playgroud)