Можно ли обновить массив на карте, используя arrayUnion? - PullRequest
0 голосов
/ 15 января 2019

В Firestore у меня есть документ, содержащий карту с именем myMap, которая содержит поле массива с именем myArr.

Можно ли использовать arrayUnion для обновления myArr, добавив в него элемент в транзакции?

await admin.firestore().runTransaction(async (transaction: Transaction) => {
    //

    const docRef: DocumentReference = admin.firestore()
        .doc(`collection/document`);

    const doc: DocumentSnapshot = await transaction.get(docRef);

    if (doc.exists) 
        await transaction.update(docRef,
            {'myMap': {'myArr': FieldValue.arrayUnion('myNewValue')},}
        );

});

Я считаю, что приведенный выше код должен добавить myArr, но вместо этого он заменяет весь массив.

Что я делаю не так?

1 Ответ

0 голосов
/ 15 января 2019

FieldValue.arrayUnion() и FieldValue.arrayRemove() работают только тогда, когда поле, указанное на верхнем уровне объекта обновления, само является списком. То, что вы делаете сейчас, предоставляя объект со списком, действительно заменяет весь список. Он не распознает существующее содержимое этого списка.

Вместо этого вы можете вызвать конкретное имя встроенного списка:

    await transaction.update(docRef,
        {'myMap.myArr': FieldValue.arrayUnion('myNewValue')},}
    );

Обратите внимание на точечную запись для конкретного вызова списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...