使用pymong从mongodb删除记录时出现问题

2024-09-29 19:15:34 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有大约50个文档ID。我的pythonveno列表包含如下所示的文档ID

5ddfc565bd293f3dbf502789
5ddfc558bd293f3dbf50263b
5ddfc558bd293f3dbf50264f
5ddfc558bd293f3dbf50264d
5ddfc565bd293f3dbf502792

但当我试图删除这50个文档ID时,我发现很难。让我解释一下——为了删除所有50个文档,我需要反复运行python脚本。第一次运行脚本时,它会删除10个,下一次运行时,它会删除18个,以此类推。我的for循环非常简单,如下所示

for i in veno:
            vv =  i[0]
            db.Products2.delete_many({'_id': ObjectId(vv)})

Tags: in文档脚本id列表fordbdelete
2条回答

我没有任何mongo实例要测试,但是呢

veno = [
'5ddfc565bd293f3dbf502789',
'5ddfc558bd293f3dbf50263b',
'5ddfc558bd293f3dbf50264f',
'5ddfc558bd293f3dbf50264d',
'5ddfc565bd293f3dbf502792',
]

# Or for your case (Whatever you have in **veno**)
veno = [vv[0] for vv in veno]
####

db.Products2.delete_many({'_id': {'$in':[ObjectId(vv) for vv in veno]}})

如果这不起作用,那么也许这个

db.Products2.remove({'_id': {'$in':[ObjectId(vv) for vv in veno]}})

据我所知,delete\u many的第一个参数是filter,所以 它的设计方式是,您不会删除特定的文档 而是满足特定条件的文档。 在上述情况下,最好是通过说->;立即删除所有文档;删除其\u id位于($in)列表中的所有文档[ObjectId(vv)用于vv in veno]

如果您的列表只是ID,那么您需要:

for i in veno:
    db.Products2.delete_many({'_id': ObjectId(i)})

完整示例:

from pymongo import MongoClient
from bson import ObjectId

db = MongoClient()['testdatabase']

# Test data setup
veno = [str(db.testcollection.insert_one({'a': 1}).inserted_id) for _ in range(50)]

# Quick peek to see we have the data correct
for x in range(3): print(veno[x])

print(f'Document count before delete: {db.testcollection.count_documents({})}')

for i in veno:
    db.testcollection.delete_many({'_id': ObjectId(i)})

print(f'Document count after delete:  {db.testcollection.count_documents({})}')

给出:

5ddffc5ac9a13622dbf3d88e
5ddffc5ac9a13622dbf3d88f
5ddffc5ac9a13622dbf3d890
Document count before delete: 50
Document count after delete:  0

相关问题 更多 >

    热门问题