Javascript 如何在Firestore数组中增加映射值
我有一个firestore firebase数据库,其中有一个用户集合 集合中有一个数组,数组中有一个映射 在地图中有一个字段“数量”。。我想增加那个数量值 使用增量没有帮助,因为数量在数组索引中Javascript 如何在Firestore数组中增加映射值,javascript,google-cloud-firestore,Javascript,Google Cloud Firestore,我有一个firestore firebase数据库,其中有一个用户集合 集合中有一个数组,数组中有一个映射 在地图中有一个字段“数量”。。我想增加那个数量值 使用增量没有帮助,因为数量在数组索引中 db.collection("users").doc(checkId).update({ myCart: firebase.firestore.FieldValue.arrayUnion({ qty: firebase.
db.collection("users").doc(checkId).update({
myCart: firebase.firestore.FieldValue.arrayUnion({
qty: firebase.firestore.FieldValue.increment(1),
}),
这是错误输出=>
未捕获(承诺中)FirebaseError:使用无效数据调用函数FieldValue.arrayUnion()。FieldValue.increment()只能与update()和set()一起使用。您需要指定要更新的字段的完整路径。因此,我认为在你的情况下,这将是:
db.collection("users").doc(checkId).update({
"myCart.0.qty": firebase.firestore.FieldValue.increment(1)
}),
要更新的字段嵌入在数组中。在这种情况下,不能使用
FieldValue.increment()
,因为无法将数组元素作为命名字段值调用
您需要做的是读取整个文档,修改内存中的字段以包含所需内容,然后将字段更新回文档中。如果需要更新为原子,也可以考虑使用事务处理。
(如果该字段不是数组的一部分,您可以从今天(29-04-2020)起使用FieldValue.increment()
)。。。这是我测试过的
假设我的数据结构如下:
收藏:用户
任何文件:比如jdfhjkshdhfw
它有一张像下面这样的地图
地图名称:UserPageVisitions
地图字段:字段1、字段2、字段3等
现在我们可以在地图中增加数字字段,如下所示:
mapname.field1等
也就是说,使用点运算符访问映射内的字段,就像对javascript对象所做的那样
JAVA代码(Android),使用事务更新字段,以便它们可以原子化地完成
transaction.update(<documentreference object>,"UserPageVisits.field1",FieldValue.increment(1));
transaction.update(,“userpagevisions.field1”,FieldValue.increment(1));
我刚刚推出了我的应用程序的一个版本,它使用了这个概念,并且正在运行
荣誉
我最诚挚的问候先生,这是在用数量1覆盖“myCart.0”中的所有值,我只想增加数量onlyOk,感谢您使用点符号,如下面的Coder Marine给出的答案所示。太容易了,谢谢!这在FlatterSDK中起作用,意味着我不必先读取值,然后递增再写入。我可以直接递增。为我节省了大量的重新配置工作,这应该是公认的答案!很高兴它帮助了你。:-)