在AngularFire2中更新嵌套数组

时间:2019-01-18 14:46:04

标签: arrays nested google-cloud-firestore angularfire2

我为Firestore文档使用以下模型:

{
  name: "test",
  isActive: true,
  items: [
   {
     id: "123",
     itemName: "testItem",
     qty: 1
   },
   {
     id: "555",
     itemName: "anotherItem",
     qty: 5
   }]
}

现在,Firestore允许使用嵌套数组(通过arrayRemove / arrayUnion),我想知道是否也可以通过AngularFire2做到这一点。

或者到目前为止唯一的方法是导入Firebase并直接使用它?
喜欢:

this.firestore.collection(<collectionName>).doc(<docID>).update({
 answers: firestore.FieldValue.arrayUnion(<AnswersObject>)
});

此外,这种模型在FIrestore中具有嵌套数组的合法性,还是应该以不同的方式构建?

2 个答案:

答案 0 :(得分:1)

很遗憾,AngularFire2尚不支持此功能。您可以通过检出source code来进行验证。

或者,如果您像我这样懒惰,并且不想在GitHub上寻找它...我要做的双重检查是将整个存储库下载为ZIP文件,然后解压缩并打开VS Code中的文件夹。在整个文件夹中搜索s = functions(f); inputVarNames = regexp(s.function, '(?<=(,|@\())[^\)]+?(?=(,|\)))', 'match'); FieldValue不会返回任何内容-这些单词在整个源代码中不存在。

因此,就目前而言,您需要坚持使用默认的Firebase / Firestore软件包是正确的。嵌套数组绝对是“合法”的事情,但是像其他所有东西一样,何时使用它取决于您的情况-而且我没有足够的资格或经验来评估您的情况并提出强有力的建议。

答案 1 :(得分:1)

我为此挣扎了一段时间,看来angular的文档总是落后的。我更新了一个像这样的数组项,该数组称为accomodation,它位于day对象内。

this.data.firestore.doc(`days/${accommodation.day}`)
  .update({
    accommodation: [
      accommodation
    ]
  });