Pymongo迭代安全保存和计数

时间:2012-05-08 16:02:44

标签: loops insert count pymongo

我正在尝试从一组对象中挑选出独特的元素,然后将它们保存到子集合中。

我的代码是:

for item in db.col1.find({'Summary': {'$ne':{}}}):
    current_specs = item['Summary']['Specs']
    if not db.col1.specs.find({'Specs':current_specs}).count():
        db.col1.specs.save({'Specs':current_specs, 'Updated': datetime.datetime.now()},safe=True)

这会在db.col1.specs中生成重复的条目。我想通过使用safe = True,它将确保写入完成,因此不会添加重复项,但似乎并非如此。

任何人都可以解释为什么会失败以及这样做的正确方法吗?

干杯

1 个答案:

答案 0 :(得分:1)

想出来:

项['Summary'] ['Specs']条目本身就是一个字典,要搜索字典,你必须搜索每个单独的字典条目

e.g。如果对象看起来像:

current_specs = {'field1': something, 'field2': something_else} 

然后我们可以通过以下方式找到它:

find({'Specs.field1':current_specs[field1], 'Specs.field2': current_specs[field2]})

你不能只使用:

find({'Specs':current_specs})