在单个查询中从mongo中删除多个文档

Anu*_*rma 36 mongodb pymongo

我有一个mongo'_id'列表,我想删除它.目前我正在这样做

# inactive_users -->  list of inactive users 
for item in inactive_users:
    db.users.remove({'_id' : item})
Run Code Online (Sandbox Code Playgroud)

但我的问题是列表太大了......(它可能会超过100,000+).因此查询列表中的每个项目只会增加服务器上的负载.他们是一种在mongo查询中传递整个列表的方法,这样我就不必一次又一次地触发查询.

谢谢

Rom*_*kar 73

db.users.remove({'_id':{'$in':inactive_users}})
Run Code Online (Sandbox Code Playgroud)

  • “ collection.remove”已被弃用。使用`collection.deleteMany`代替。文档[此处](https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/) (2认同)

Yev*_*yev 14

列出所有并使用$in运算符:

db.users.remove({_id:{$in:[id1, id2, id3, ... ]}})
Run Code Online (Sandbox Code Playgroud)

  • 如果该列表真的是10万件以上的物品,那么您可能希望将其分解为每次通话几百个批次. (4认同)

jul*_*oup 6

您需要使用ObjectId()以下格式传递特定格式的ID :

db.users.remove({_id: {$in: [ObjectId('Item1'), ObjectId('Item2'), ObjectId('Item2')]}});
Run Code Online (Sandbox Code Playgroud)

Remove不接受整数 - 你必须使用格式为的ObjectId实例. _idstring