我有一个Firestore Firebase数据库,其中有一个集合用户 集合中有一个数组,数组中有一个映射 在地图中有一个数量q ..我想增加那个qty值..
使用增量无济于事,因为数量在数组索引内
db.collection("users").doc(checkId).update({
myCart: firebase.firestore.FieldValue.arrayUnion({
qty: firebase.firestore.FieldValue.increment(1),
}),
这是错误输出=> 未捕获(承诺)FirebaseError:函数FieldValue.arrayUnion()用无效数据调用。 FieldValue.increment()只能与update()和set()一起使用
答案 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)
}),