0

upsert=true で mongodb update メソッドを使用しています。

私のデータは次のようになります。

{"my_id":"1",
"test_list":[{"test_id":1,"test_name":"pppp"}]}

今、私は次のコマンドを使用しています:

db.testcol.update({"my_id":1,"test_list.test_id":2},{"$set":{"test_list.$.test_name":"mmmm"}},true,true)

「test_list」が存在しないため、新しいオブジェクトを「test_list」に挿入したい

しかし、私はエラーが発生しています:

Cannot apply the positional operator without a corresponding query field containing an array.

データが彼らのものでフィールドを更新する必要があるのか​​ 、それとも彼らのものではなく挿入する必要があるのか​​(初めて)がわからないため、操作に「挿入」を使用できません

4

1 に答える 1

0

アップサートは、配列要素だけでなく、ドキュメント全体が存在するかどうかに関係なく、更新を機能させたい場合に使用します。配列要素の場合、次を使用できます$addToSet

db.testcol.update(
    {"my_id": "1"},
    {"$addToSet": {"test_list": {"test_id": 2, "test_name": "mmmm"}}})

test_list一致する要素がまだ存在しない場合にのみ、ドキュメントの配列フィールドに新しい要素が追加されます。

于 2013-10-22T18:08:07.097 に答える