条件原子mongo删除不同的结果

时间:2014-08-28 05:54:16

标签: python mongodb mongodb-query pymongo

mongo数据库中有一组项目。我希望实现一个删除项目的方法,前提是id

但是,我只想删除项目,例如,deletable属性设置为true。然后,我想区分以下情况(错误)来处理它们不同:

  • 该项目存在且deletable属性设置为true =>删除它
  • 该项目存在且deletable属性设置为false =>请勿将其删除raise Error1
  • 该项目不存在=>无需删除,raise Error2

假设应用程序是多线程的,可能有几个工作人员添加,删除和修改项目,有没有办法正确处理这种情况?

至于现在,我可以静默删除或跳过具有指定iddeletable属性的项目,或逐个发出一些查询来处理所有情况,但它可能不是线程安全的。

如果重要的话,我使用pymongo来访问数据库。

1 个答案:

答案 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