编写一个查找文档的函数,如果“删除== 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”中有了搜索结果,那么就没有必要重做搜索...?
答案 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())