如何更新Firestore子集合字段

时间:2019-01-10 13:44:51

标签: javascript firebase google-cloud-firestore

我正在尝试update在Firestore中的一个字段,但找不到正确的呼叫:

changeAlertState(senderId, receiverId, alertType, bool){

  let type = alertType == 'toBe' ? 'toBeAlerted' : 'toAlert';

  this.afs.firestore
  .collection("books")
  .doc(senderId + '/' + receiverId)
  .update({
                        [type]: bool
                    })
  .then(() => {
                console.log("Contact " + receiverId + " alert successfully updated!");
            });
}

这是数据库: enter image description here

我收到此错误:

  

FirebaseError:[code = invalid-argument]:无效的文档引用。文档引用必须具有偶数个段,但是book / 33KlbrBypXMe888vpO7dXgDVrfY2 / hLh7Ao7IABZBukEpGFK1I8lq1rx1包含3

2 个答案:

答案 0 :(得分:1)

您要将字段路径的一部分传递给对doc()的调用。那将行不通,因为您需要(仅)将文档ID传递到doc中。之后,您可以使用.

分隔路径的各段,从而为要更新的字段建立一个字段路径。
var value = {};
value[receiverId+"."+type] = bool;
this.afs.firestore
  .collection("books")
  .doc(senderId)
  .update(value)

另请参阅documentation on updating fields in a nested object

答案 1 :(得分:0)

基本上,数据库结构必须进行收集,文档,收集,文档等

这是explicitly stated in the documentation

  

文档存在于集合中,集合只是文档的容器。

  

集合包含文档,仅此而已。它不能直接包含带有值的原始字段,也不能包含其他集合。

如果您可以共享有关所需结构的更多信息(例如,更完整的屏幕截图),则将有所帮助。 This example关于如何转换为正确嵌套的集合/文档设置也可能有帮助。