Непоследовательные результаты с использованием точечной нотации в Firestore (setData vs updateData) - PullRequest
0 голосов
/ 14 января 2020

ОБНОВЛЕНИЕ

Я столкнулся с несоответствиями с точечной нотацией Firestore и узнал, что мы должны использовать литеральную нотацию при использовании операции setData и можем использовать точечную нотацию при использовании updateData операция.

Следующая операция игнорировала точечную запись:

...setData(
    ["someMap.\(someId)": FieldValue.increment(Int64(-1))]
, forDocument: Firestore.firestore().collection("someDocument").document(userId), merge: true)

someMap: ["x34JF2ko0sPLnbfoijw": 1] // not decremented
someMap.x34JF2ko0sPLnbfoijw: -1 // instead, new number field created

Чтобы устранить проблему, мы должны просто использовать буквенную запись:

...setData(
    ["someMap": [someId: FieldValue.increment(Int64(-1))]
, forDocument: Firestore.firestore().collection("someDocument").document(userId), merge: true)

1 Ответ

0 голосов
/ 14 января 2020

Ничего не изменилось с точечной нотацией, но, видимо, не работает с setValue(). Насколько я понимаю, документировано только для работы с updateData () - вы можете увидеть примеры в этой ссылке на документацию.

Итак, что вам придется делать, если вы хочу обновить это вложенное поле примерно так:

transaction.setData(
    [ "interactionCounts.\(eventId)": FieldValue.increment(Int64(-1)) ],
    forDocument: Firestore.firestore().collection("trackers").document(userId)
)

Я не занимаюсь быстрым программированием, но я подтвердил, что подобный код работает правильно для nodejs update() против set() с объединением .

Если вы абсолютно уверены, что это работало с setData() в прошлом, я рекомендую подать проблему с iOS SDK .

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