1

このようなスキーマでは、「items」フィールドにネストされた変換を含むサブドキュメントの配列が含まれています。

{
        "_id" : ObjectId("513740415b51ea0803000001"),
        "items" : [
                {
                        "id" : ObjectId("5137407f5b51ea100f000000"),
                        "title" : {
                                "en" : "Yes",
                                "fr" : "Oui",
                                "es" : "Si"
                        }
                },
                {
                        "id" : ObjectId("5137407f5b51ea100f000003"),
                        "title" : {
                                "en" : "No"
                        }
                }

        ],
}

特定のアイテムIDに翻訳を追加するにはどうすればよいですか?

4

2 に答える 2

1

$位置演算子を使用して、ドキュメントの特定の配列要素を更新できます。

たとえば、次を追加し"de": "nein"ます。

db.test.update(
    {'items.id': ObjectId("5137407f5b51ea100f000003")}, 
    {$set: {'items.$.title.de': 'nein'}})

オブジェクト$内のは、クエリ選択パラメータが一致した要素のインデックスを表します。$setitems

于 2013-03-06T14:27:16.263 に答える
0

あなたはそのようにそれを行うことができます:

db.yourColName.update({"items.id" : "itemId"}, {$set : {"translationField" : "translationValue"}})

ここで、クエリの最初の部分で、配列内の直接アイテムを検索し、新しいフィールド+値を設定します。

すでにお気づきのように、Mongoには静的スキーマがありません。したがって$set、既存のフィールドを更新するか、新しいフィールドを作成します。これはすべて、サブクエリで設定したフィールド名によって異なります。

直接ドキュメントにアクセスするには、$演算子を使用します。items.$.title.frここで$、現在のオブジェクトを表します。

于 2013-03-06T14:19:48.300 に答える