Javascript 如何在Firestore数组中增加映射值

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.

我有一个firestore 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中起作用,意味着我不必先读取值,然后递增再写入。我可以直接递增。为我节省了大量的重新配置工作,这应该是公认的答案!很高兴它帮助了你。:-)