首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase:带有对象的FieldValue.arrayUnion

Firebase:带有对象的FieldValue.arrayUnion
EN

Stack Overflow用户
提问于 2019-05-10 05:53:40
回答 1查看 2.3K关注 0票数 3

例如,我有一个这样的医生:

代码语言:javascript
复制
team: {
members: [{name: "john", age: 2}, {name: "tim", age: 3}]
}

我想把Tims的年龄更新为4 {name: "tim", age: 3},改为{name: "tim", age: 4}

我可以用FieldValue.arrayUnion来做这个吗?

因为现在。

代码语言:javascript
复制
...
.update({team: firbase.firestore.FieldValue.arrayUnion({name: "tim", age: 4})})

将创建新的条目,团队将像

代码语言:javascript
复制
[
 {name: "john", age: 2}, 
 {name: "tim", age: 3}, 
 {name: "tim", age: 4} <-- duplicate
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 05:59:36

不,arrayUnion不会在这里工作。arrayUnion认为列表中的每一项都是唯一的,基于其的整个内容。两个对象被认为是不一样的,除非它们的属性的所有都是严格相等的。这就是为什么你在列表中得到了一个全新的项目--年龄是不一样的,而Firestore没有办法知道你只想要“名字”是唯一的。

如果要更改数组的内容,则必须读取文档,在内存中更改数组的内容,然后将更改后的内容写回文档。事务可能适合这种情况。

另一个想法是:考虑根据出生日期而不是现在的年龄来存储年龄。出生日期永远不会改变,年龄可以根据与出生日期相关的当前时间计算。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56071482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档