Как увеличить значение карты в массиве Firestore - PullRequest
1 голос
/ 09 октября 2019

У меня есть база данных firestore firebase, в которой у меня есть коллекция пользователей, есть массив в коллекции, и в массиве есть карта на карте, есть поле qty .. Я хочу увеличить это количество qty.

image

использование инкремента не помогает, так как кол-во находится внутри индекса массива

    db.collection("users").doc(checkId).update({
                myCart: firebase.firestore.FieldValue.arrayUnion({
                    qty: firebase.firestore.FieldValue.increment(1),

                }),

это ошибка Output => Uncaught (в обещании) FirebaseError:Функция FieldValue.arrayUnion () вызвана с неверными данными. FieldValue.increment () может использоваться только с update () и set ()

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Поле, которое вы хотите обновить, встроено в массив. В этом случае вы не можете использовать FieldValue.increment(), поскольку невозможно вызвать элемент массива в качестве значения именованного поля.

Вместо этого вам нужно будет прочитать весь документ, изменитьполе в памяти, чтобы содержать то, что вы хотите, и обновите поле обратно в документ. Также рассмотрите возможность использования транзакции для этого, если вам нужно обновить до атомарного.

(Если поле не было частью массива, вы можете использовать FieldValue.incrememnt().)

0 голосов
/ 09 октября 2019

Вам необходимо указать полный путь к полю, которое вы пытаетесь обновить. Так что я думаю, что в вашем случае это будет:

db.collection("users").doc(checkId).update({
  "myCart.0.qty": firebase.firestore.FieldValue.increment(1)
}),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...