如何在Firestore数组中增加地图值

时间:2019-10-09 15:10:03

标签: javascript google-cloud-firestore

我有一个Firestore Firebase数据库,其中有一个集合用户 集合中有一个数组,数组中有一个映射 在地图中有一个数量q ..我想增加那个qty值..

image

使用增量无济于事,因为数量在数组索引内

    db.collection("users").doc(checkId).update({
                myCart: firebase.firestore.FieldValue.arrayUnion({
                    qty: firebase.firestore.FieldValue.increment(1),

                }),

这是错误输出=> 未捕获(承诺)FirebaseError:函数FieldValue.arrayUnion()用无效数据调用。 FieldValue.increment()只能与update()和set()一起使用

3 个答案:

答案 0 :(得分:1)

要更新的字段嵌入在数组中。在这种情况下,您不能使用FieldValue.increment(),因为不可能将数组元素作为命名字段值来调用。

您要做的是读取整个文档,修改内存中的字段以包含所需内容,然后将该字段更新回文档中。如果需要更新为原子操作,也可以考虑为此使用事务。

(如果该字段不是数组的一部分,则可以使用FieldValue.incrememnt()。)

答案 1 :(得分:1)

截至今天(2020年4月29日)...这已由我测试。

假设我的数据结构是这样的:

收藏:用户 任何文件:说jdfhjksdhfw 它具有如下图 映射名称:UserPageVisits 地图字段:field1,field2,field3等

现在我们可以增加地图中的数字字段,如下所示:

mapname.field1等...

这就是使用点运算符来访问地图中的字段,就像对javascript对象所做的一样。

JAVA代码(Android),使用事务更新字段,以便它们可以自动完成。

transaction.update(<documentreference object>,"UserPageVisits.field1",FieldValue.increment(1));

我刚刚发布了使用此概念的应用程序,该版本正在运行。

荣誉!!

我最好的问候

答案 2 :(得分:0)

您需要指定要更新的字段的完整路径。所以我认为您的情况应该是:

db.collection("users").doc(checkId).update({
  "myCart.0.qty": firebase.firestore.FieldValue.increment(1)
}),