pyMongo删除/修改找到的文档

时间:2019-02-21 02:37:47

标签: python mongodb pymongo

编写一个查找文档的函数,如果“删除== True”,则将其删除。

是否可以删除“ .find”操作产生的文档?

    def findOrphanSensors(self, delete = False):
       deviceList = sorted(self._dbC.devicesCol.find({}).distinct('_id'))
       print(deviceList)
       orphanSensors = self._dbC.sensorsCol.find({'parentDeviceID':{'$nin':deviceList}})
       print(orphanSensors.count())
       if delete == True:
          orphanSensors.remove() ???

我可以做到:

    if delete == True:
        self._dbC.sensorsCol.deleteMany({'parentDeviceID': {'$nin': deviceList}})

但是我想如果我已经在“ orphanSensors”中有了搜索结果,那么就没有必要重做搜索...?

1 个答案:

答案 0 :(得分:1)

是的,可以。 find的结果可能会被迭代。

for orphan in orphanSensors:
  self._dbC.sensorsCol.deleteOne(orphan['_id'])

但是,这可能不如调用delete_many()那样有效。如果您不需要在删除孤儿之前先打印它们的数量,则可以这样重新排列代码:

def findOrphanSensors(self, delete = False):
  deviceList = sorted(self._dbC.devicesCol.distinct('_id'))
  print(deviceList)
  orphan_filter = {'parentDeviceID':{'$nin':deviceList}}
  if delete:
    result = self._dbC.sensorsCol.delete_many(orphan_filter)
    print(result.deleted_count)
  else:
    result = self._dbC.sensorsCol.find(orphanFilter)
    print(result.count())