例如,我有一个这样的医生:
team: {
members: [{name: "john", age: 2}, {name: "tim", age: 3}]
}我想把Tims的年龄更新为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
]发布于 2019-05-10 05:59:36
不,arrayUnion不会在这里工作。arrayUnion认为列表中的每一项都是唯一的,基于其的整个内容。两个对象被认为是不一样的,除非它们的属性的所有都是严格相等的。这就是为什么你在列表中得到了一个全新的项目--年龄是不一样的,而Firestore没有办法知道你只想要“名字”是唯一的。
如果要更改数组的内容,则必须读取文档,在内存中更改数组的内容,然后将更改后的内容写回文档。事务可能适合这种情况。
另一个想法是:考虑根据出生日期而不是现在的年龄来存储年龄。出生日期永远不会改变,年龄可以根据与出生日期相关的当前时间计算。
https://stackoverflow.com/questions/56071482
复制相似问题