2

mongodb コレクション内に、次のような埋め込みドキュメントのリストを含むドキュメントがあります ( pymongowithcolのインスタンスとして使用pymongo.collection.Collection):

In [1]: col.find_one({'reqid': 1})
Out[1]: 
{u'_id': ObjectId('4fa3446f1d41c81bba000000'),
 u'reports': [{u'comments': [u'A']},
              {u'comments': [u'B']},
              {u'comments': [u'A', u'B']},
              {u'comments': [u'C']},
              {u'comments': [u'A', u'B', u'C']}],
 ...} # Other fields

$set1 回の更新commentsで、ドキュメント内のすべてを空のリストにリセットしたいと考えています。次のことを試しましたが、うまくいきません。

In [2]: col.update({'reqid': 1}, {'$set': {'reports.comments': []}})
In [3]: col.find_one({'reqid': 1}, {'reports.comments': 1})
Out[3]: 
{u'_id': ObjectId('4fa3446f1d41c81bba000000'),
 u'reports': [{u'comments': [u'A']},
              {u'comments': [u'B']},
              {u'comments': [u'A', u'B']},
              {u'comments': [u'C']},
              {u'comments': [u'A', u'B', u'C']}]}

考えられる解決策を調べました$ positional operatorが、まだわかりません。これを行うために Python でロジックを記述するのは非常に簡単ですが、純粋に単一のpymongo.collection.Collection.update呼び出しでこれを行うことの優雅さを高く評価します。どんな助けでも大歓迎です。

4

0 に答える 0