Firebase: FieldValue.arrayUnion с объектами - PullRequest
1 голос
/ 10 мая 2019

Например, у меня есть такой документ:

team: {
members: [{name: "john", age: 2}, {name: "tim", age: 3}]
}

И я хочу обновить возраст Тимса до 4 {name: "tim", age: 3} до {name: "tim", age: 4}

Могу ли я сделать это, используя FieldValue.arrayUnion ?

Потому что прямо сейчас.

...
.update({team: firbase.firestore.FieldValue.arrayUnion({name: "tim", age: 4})})

Создаст новую запись и команда будет похожа на

[
 {name: "john", age: 2}, 
 {name: "tim", age: 3}, 
 {name: "tim", age: 4} <-- duplicate
]

1 Ответ

2 голосов
/ 10 мая 2019

Нет, arrayUnion не будет работать здесь. arrayUnion считает каждый элемент в списке уникальным, основываясь на его целом содержимом. Два объекта не считаются одинаковыми, если только все их свойства не являются строго равными. Вот почему вы получаете совершенно новый элемент в списке - возрасты не совпадают, и Firestore не может знать, что вы хотите, чтобы «имя» было уникальным.

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

Еще одна мысль: подумайте о сохранении возраста с точки зрения даты рождения, а не текущего возраста. Даты рождения никогда не меняются, и возраст можно рассчитать на основе текущего времени, связанного с датой рождения.

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