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
        }
    }
});

Он фактически обновляется правой клавишей, но, к сожалению, он перезаписывает другие ключи (они удаляются).

Ответ 1

Я нашел решение, вдохновленное решением firebase (заменяя "/" на "." ).

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

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

Ответ 2

Это решение работало для меня:

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

Ответ 3

Вы можете обновлять определенные поля переменной (ly) с именами вложенных объектов, как показано ниже.

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

Ответ 4

Это не работает для меня. Он перезаписывает значение userUpdate, как указано выше.