0

オブジェクトのコレクションから一意の要素を選択して、それらをサブコレクションに保存しようとしています。

私が持っているコードは次のとおりです。

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を使用することで、書き込みが完了し、重複が追加されないことを確認できると思いましたが、そうではないようです。

なぜこれが失敗しているのか、そしてそれを行う正しい方法を誰かが説明できますか?

乾杯

4

1 に答える 1

1

理解した:

item ['Summary'] ['Specs']エントリはそれ自体が辞書であり、辞書を検索するには、個々の辞書エントリを検索する必要があります。

たとえば、オブジェクトが次のようになっている場合:

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

次に、次の方法で見つけることができます。

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

あなたはただ使うことはできません:

find({'Specs':current_specs})
于 2012-05-21T18:10:41.783 に答える