4

私は次のようなドキュメント構造を持っています

{
    "_id" : ObjectId("52263922f5ebf05115bf550e"),
    "Fields" : [
        {
            "Field" : "Lot No",
            "Rules" : [ ]
        },
        {
            "Field" : "RMA No",
            "Rules" : [ ]
        }
    ]
}

次のコードを使用して、オブジェクトを保持するルール配列にプッシュして更新しようとしました。

db.test.update({
    "Fields.Field":{$in:["Lot No"]}
}, {
    $addToSet: {
        "Fields.Field.$.Rules": {
            "item_name": "my_item_two",
            "price": 1
        }
    }
}, false, true);

しかし、次のエラーが表示されます。

文字列フィールド名 [フィールド] を使用して配列に追加することはできません

アップデートはどのように行うのですか?

4

1 に答える 1

4

そのワイルドカードを深く使いすぎました$。配列内の項目に一致するため、Fields次を使用してその項目にアクセスできますFields.$。この式は配列内の最初の一致を返すため、またはFieldsによってそのフィールドに到達します。Fields.$.FieldFields.$.Result

さて、更新しましょうupdate

db.test.update({
    "Fields.Field": "Lot No"
}, {
    $addToSet: {
        "Fields.$.Rules": {
            'item_name': "my_item_two",
            'price':1
        }
    }
}, false, true);

queryあなたの表現に等しいので、私は短くしたことに注意してください。

于 2013-09-03T20:52:38.157 に答える