mongo数据库中有一组项目。我希望实现一个删除项目的方法,前提是id
。
但是,我只想删除项目,例如,deletable
属性设置为true
。然后,我想区分以下情况(错误)来处理它们不同:
deletable
属性设置为true
=>删除它deletable
属性设置为false
=>请勿将其删除raise Error1
raise Error2
假设应用程序是多线程的,可能有几个工作人员添加,删除和修改项目,有没有办法正确处理这种情况?
至于现在,我可以静默删除或跳过具有指定id
和deletable
属性的项目,或逐个发出一些查询来处理所有情况,但它可能不是线程安全的。
如果重要的话,我使用pymongo
来访问数据库。
答案 0 :(得分:0)
你永远不会在一个声明中得到这个,因为"有多少"字段符合您的条件。但是你可以使用逻辑条件和第一次尝试没有删除任何文档的额外查找来执行此操作。只需使用写入关注响应即可查看发生的情况。
resp = db.collection.remove({ 'id': id, 'deletable': True }, w=1)
if resp['n'] == 0:
doc = db.collection.find_one({ 'id': id, 'deletable': False })
if doc is None:
# this would be not found 404
else:
# this would the not deletable
else:
# this would be deleted 200
因此,如果检查了所返回的值,请告知您是否发生了删除操作,并且以下find_one
让您知道文档是否未找到或仅被标记当时可删除false
。