Firebase Firestore中merge和mergeFields之间的区别

时间:2019-04-26 18:24:05

标签: firebase google-cloud-firestore angular6

我可以通过以下方法将数据发送到Firebase Firestore文档:

1)add()

2)set()

我非常清楚我该如何将数据添加到Firestore中,所以没有混乱。但是我的问题是Firebase Firestore中的“设置”方法有两个setOption,例如merge和mergefields。这两个设置选项有什么区别,我认为这两个选项都在做相同的工作。如何实现setOption'mergeFIeld'?我找不到任何文档。

2 个答案:

答案 0 :(得分:4)

这就是我的解释方式。 如果为设置操作指定了merge = true,则它类似于Object.assign(firestoreDoc,yourpayload)。例如,如果firebaseDoc内容是这样的:

{
  name:'batman',
  city: 'gotham',
  isLeagueMember: true
}

您的有效负载(JSON)内容如下:

{
  isLeageMember:false,
  reason:'gone rouge'
}

在使用merge = true进行设置操作之后,firestoreDoc看起来像

{
  name:'batman',
  city: 'gotham',
  isLeagueMember: false,
  reason:'gone rouge'
}

另一方面,对于mergeFields,您将指定要更新的字段集。因此,如果我以上述示例为例,但是这次使用合并字段选项[名称,原因]进行设置操作,则结果(设置完成后的firebaseDoc)将为:

{
  name:'batman',
  city: 'gotham',
  isLeagueMember: true,
  reason:'gone rouge'
}

这对我来说也有些困惑,直到我发现最大的线索是merge是一个布尔值并且mergeFields是一个数组。

这对于批处理操作非常方便。

希望这会有所帮助。谢谢。

答案 1 :(得分:2)

您已经注意到,使用DocumentReference的set()函数时,可以将SetOptions的merge中的任一个作为第二个参数传递:

  

更改set()调用的行为,以仅替换其data参数中指定的值。 set()调用中省略的字段保持不变。

或SetOptions的mergefields

  

更改set()调用的行为,以仅替换指定的字段路径。任何未指定的字段路径都将被忽略,并且保持不变。

两者都是可选的。从文档中可以看到,每个文档都有特定的行为。除此之外,还有一个很大的区别,mergeboolean,而mergefields(string | FieldPath)[]