当前位置: 首页 > 知识库问答 >
问题:

合并和合并字段之间的区别

安高义
2023-03-14

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

1) 添加()

2) set()

我很清楚,如何将数据添加到Firestore中,其中没有任何混淆。但我的问题是,Firebase Firestore中的方法“set”有两个setOption,例如merge和mergefields。这两组选项之间的区别是什么,我认为这两个选项的作用是相同的。如何实现setOption“mergeFIeld”?我找不到它的任何文档。

共有3个答案

轩辕越泽
2023-03-14
匿名用户

正如您已经注意到的,当使用DocumentResources的set()函数时,您可以将SetOptions的合并作为第二个参数传递:

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

或SetOptions的合并字段:

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

两者都是可选的,但都会更改设置,以用作合并/追加插入,而不是覆盖数据参数中未提供的所有字段。如果文档引用不存在,这将从文档引用创建文档,否则将执行更新行为。

设置选项。“合并”将根据您在其数据参数中指定的对象键进行合并。设置选项。MergeFields有点尴尬。浏览文档描述很容易,但它指出,在更新值时,您指定的字段路径数组将是从数据参数中获取的唯一路径。这意味着在合并操作中不会使用数据参数中传递的所有键值。

mergeFields视为从提供的数据中选择键值并将其应用到您的操作中。这并不是真正必要的,只是清理键值并传递到合并的简写。请注意,它不会删除在字段路径数组中声明的数据中省略的字段,相反,您只会收到一个Firebase错误,即输入数据中缺少字段路径。似乎显式FieldValue.delete是该行为的唯一选择。

对于嵌套字段路径,您确实可以获得一些额外的好处。您可以更明确地控制更新操作。

例如,文档名称:{第一个:“Jon”,最后一个:“Doe”}

set({name:{first:'简' } }, { 合并:真});

成为

<代码>名称:{第一个:“Jane”,最后一个:“Doe”}

set({name:{first:'larry'}},{mergeFields:['name.first']})

也成为

<代码>名称:{第一个:“Jane”,最后一个:“Doe”}

<代码>集合({name:{first:'larry'}},{mergeFields:['name']})

与其他人不同

名称:{first:'Jon'}

替换字段路径的位置。

方博学
2023-03-14

需要注意的一件重要事情<如果你问我的话,code>{merge:true}的交互有点奇怪。如果内部对象为空,它将替换现有的内部对象。但是,如果该属性不为空,它将更新内部对象中的指定属性,并保留其余属性。

E、 g.<代码>集合({innerObject:{},{merge:true})

到现有的{innerObject:{someKey:'someValue'}}

将导致{innerObject:{}}}

然而

set({innerObject:{someOtherKey:'someOtherValue},{merge:true})

到现有的{innerObject:{someKey:'someValue'}}

将导致{innerObject:{某某键:'某某值',某某键:'某某值' } }

因此,确保清除空的内部对象,除非您想从文档中删除它们。

阎涵容
2023-03-14

这就是我对它的解释。如果为集合操作指定了merge=true,则它类似于对象。分配(firestoreDoc,您的负载)。例如,如果firebaseDoc内容如下:

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

你的有效载荷(JSON)内容是这样的:

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

在使用merge=true设置操作后,firestoreDoc将如下所示

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

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

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

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

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

希望这有帮助。非常感谢。

 类似资料:
  • 考虑定义如下的 FooBar1 和 类型: 我的尝试/研究: 它们是双向相互分配的!(手动检查并使用检查 - 请参阅此处) 不过,它们彼此并不完全相同!(与检查 - 见这里) VSCode 的智能感知不会崩溃

  • 在Cloud Firestore中,有三种写入操作: 在文档中,它说使用将给定对象与现有文档合并。 使用更新(对象)时也会发生同样的情况。。。那么有什么区别呢?谷歌会复制这样的功能,这似乎很奇怪。

  • 我在postgresql里看到有两个独立的算法叫做外部排序和外部合并进行排序。我觉得两者是一样的。据我所知,外部排序是一个排序算法的集合,当整个批次无法在内存(RAM)中排序时,它处理大量数据的排序,并有两个阶段,第一阶段是对小块数据进行排序并将其存储在临时文件中,第二阶段是合并所有这些子文件以获得最终数据集。 我还知道外部合并排序算法是外部排序技术的一个示例。 所以在我的例子中,外部排序和外部合

  • 本文向大家介绍分组字符合并SQL语句 按某字段合并字符串之一(简单合并),包括了分组字符合并SQL语句 按某字段合并字符串之一(简单合并)的使用技巧和注意事项,需要的朋友参考一下 标题:按某字段合并字符串之一(简单合并) 描述:将如下形式的数据按id字段合并value字段。 id    value ----- ------ 1     aa 1     bb 2     aaa 2     bbb

  • 本文向大家介绍Java中传统集合与并行集合之间的区别,包括了Java中传统集合与并行集合之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,在Java中,集合是最重要的概念之一,它使Java本身成为一种强大的语言。它仅支持Java中的集合,这使得它可以方便,有效地支持任何类型的数据以及可能对它们进行的CRUD操作。 但是在同一阶段,当集合暴露于多线程环境时,由于某些地方集合缺乏对多线程环

  • 问题内容: 我想实现 .NET的时间段库中 提供的类似功能,但要实现SQL中的类似功能。 首先,我有一个表,其中有几行带有开始日期和结束日期, 我想像这样将它们合并在一起: 组合 然后,根据该结果和另一个来自不同表的结果,我想 找出它们两者之间的交集,像这样,但是只有2个输入 (找到两个中都存在的周期): 路口 一旦我有了交叉路口,便只是在上面总结时间。 在这里,我通过示例提供了一个SQL Fid