web-dev-qa-db-ja.com

Cloud Firestore:ネストされたオブジェクトのフィールドをダイナミックキーで更新する

firestoreの公式ドキュメントに従ってください:

{
    name: "Frank",
    favorites: { food: "Pizza", color: "Blue", subject: "recess" },
    age: 12
}

// To update favorite color:
db.collection("users").doc("frank").update({
    "favorites.color": "Red"
})

色の代わりにダイナミックキーを使用したいと思います。

db.collection("users").doc("frank").update({
    "favorites[" + KEY + "].color": true
});

もちろんこれは不可能であり、エラーをスローします。

私はこれをやろうとしています:

db.collection("users").doc("frank").update({
    favorites: {
        [key]: {
            color": true
        }
    }
});

実際には正しいキーで更新されていますが、残念ながら他のキーを上書きしています(削除されています)。

37
Brieuc

このソリューションは、Firebaseソリューションに触発されたものでした(「/」を「。」に置き換えます)。

var usersUpdate = {};
usersUpdate[`favorites.${key}.color`] = true;

db.collection("users").doc("frank").update(usersUpdate);
60
Brieuc

このソリューションは私のために働いた:

db.collection('users').doc('frank').update({
  ['favorites.' + key + '.color']: true
});
19

以下のように、ネストされたオブジェクトの名前付き変数の特定のフィールドを更新できます。

ref.set({
    name: "Frank",
    favorites: { food: "Pizza", quantity: 2 }
});

//now the relevant update code
var name = "favorites";
var qty = 111;
var update = {};
update[name+".quantity"] = qty;
ref.update(update);

https://jsbin.com/hihifedizu/edit?js,console

1
Ron Royston