我最近开始使用PyMongo作为MongoDB的接口。但是当我从一个集合中删除文档时,我遇到了一些奇怪的问题。
以下是一个例子:
from bson import ObjectId
from pymongo import MongoClient
# Open connection
client = MongoClient(mongo_html)
collection_post = client["MyCollection"].posts
# Delete procedure
_ids_to_delete = [ObjectID("xxxxxxx..."), ..., ObjectID("xxxxxxx...")]
n_to_delete = len(_ids_to_delete)
result = collection_post.delete_many({'_id': {'$in': _ids_to_delete}})
n_delete = result.deleted_count
if n_delete != n_to_delete:
raise Exception("Well well well...")
现在,我知道_ids_to_delete中的所有文档都存在于数据库中,事实上,如果我在发生异常时运行以下文件
if n_delete != n_to_delete:
for _id in _ids_to_delete:
search_result = collection_post.find({'_id': _id})
仍然找到应该删除的文档。为了解决这个问题,我尝试使用delete_one()代替循环,结果类似。
我在这里遗漏了什么吗?另一台计算机上的另一个进程是否同时写入同一个集合的事实会产生这种影响吗?