Firestore не хранит два одинаковых значения при обновлении массива - PullRequest
0 голосов
/ 13 мая 2019

Используя флаттер, при обновлении массива с двумя или более последовательными одинаковыми значениями, Firestore добавляет только одно.

Пример:

void updateValue() {
var now = [new DateTime.now()];
int pain =5;
 Firestore.instance.collection('Patient').document('bC2ML7LaQ1fWGOl37ZUq').collection('Symptom').document('2H6e99Bvrz6h0HBzgnyg')
            .updateData({ 'nauseaLevel' : FieldValue.arrayUnion([pain]), 'nauseaTime':FieldValue.arrayUnion(now)});
          }

При выполнении этой функции 2 раза массив «nauseaLevel» в firestore добавит только одно значение «pain» и проигнорирует второе.

массив nauseaTime работает как положено, так как значения отличаются.

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вы не можете использовать arrayUnion для управления массивом, который должен содержать дубликаты, как вы можете определить из определения arrayUnion.

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

0 голосов
/ 13 мая 2019

Согласно официальной документации, касающейся обновления элементов в массиве :

arrayUnion() добавляет элементы в массив, но только элементы, которых еще нет.

Таким образом, вы не можете добавить дубликаты элементов в массив в Cloud Firestore с помощью функции arrayUnion().

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

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