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

使用{合并:true}的FirestSet和Update之间的区别

向泽语
2023-03-14

在Cloud Firestore中,有三种写入操作:

  1. add()
  2. set()
  3. 更新()

在文档中,它说使用set(ject,{mer: true})将给定对象与现有文档合并。

使用更新(对象)时也会发生同样的情况。。。那么有什么区别呢?谷歌会复制这样的功能,这似乎很奇怪。

共有3个答案

江仲渊
2023-03-14

每个文档:https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects

点表示法允许您更新单个嵌套字段,而不覆盖其他嵌套字段。如果更新不带点标记的嵌套字段,将覆盖整个贴图字段。

如上所述,这将取代整个friends结构。

db.collection('users').doc('random-id').update({
    "friends": {
        "friend-uid-3": true
    }
})

这没有。

db.collection('users').doc('random-id').update({
    "friends.friend-uid-3": true
})
林君博
2023-03-14

设置合并和更新之间的另一个区别(扩展了Scarygami的答案)是使用嵌套值时。

如果您的文档结构如下:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
   }
 }

并希望添加{“friend-uid-3”:true}

使用这个:

db.collection('用户'). doc('随机id'). set({"朋友":{"朋友-uid-3": true}},{合并: true})

将生成以下数据:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
     "friend-uid-3": true
   }
 }

但是使用以下方式更新

<代码>分贝。集合(“用户”)。文档('random-id')。更新({“friends”:{“friends-uid-3”:true}})

将生成以下数据:

 `{
   "friends": {
     "friend-uid-3": true
   }
 }`
丁雅惠
2023-03-14

我理解差异的方式:

>

使用合并设置将更新文档中的字段,如果不存在,则创建该字段

更新将更新字段,但如果文档不存在,则将失败

创建将创建文档,但如果文档已存在,则会失败

您提供给set和update的数据类型也有所不同。

对于set,您始终必须提供文档形状的数据:

set(
  {a: {b: {c: true}}},
  {merge: true}
)

通过更新,您还可以使用字段路径更新嵌套值:

update({
  'a.b.c': true
})
 类似资料:
  • 我可以通过以下方法将数据发送到Firebase FiRecovery文档: 1) 添加() 2) set() 我很清楚,如何将数据添加到Firestore中,其中没有任何混淆。但我的问题是,Firebase Firestore中的方法“set”有两个setOption,例如merge和mergefields。这两组选项之间的区别是什么,我认为这两个选项的作用是相同的。如何实现setOption“m

  • 问题内容: 要修改猫鼬现有条目中的字段,使用之间有什么区别 还有这个 我问这个问题的原因是因为有人建议我昨天发布一个问题:NodeJS和Mongo- 当多个用户同时发送请求时出现意外行为。该人员建议使用更新而不是保存,但我尚不完全清楚为什么会有所作为。 谢谢! 问题答案: 首先有两个概念。您的应用程序是 客户端 ,Mongodb是 服务器 。 主要区别在于,在客户端代码中已经有一个对象,或者必须先

  • 问题内容: 我正在研究MySQL,我知道update用于更新表中的记录或行。那么,那有什么不同呢?好像他们是一样的。 谢谢,任何帮助将不胜感激。 问题答案: 是DDL(数据定义语言)语句。而DML(数据操作语言)语句是。用于更新表的结构(添加/删除字段/索引等)。而用于更新数据。

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

  • 问题内容: 从文档中,我们可以了解有关该功能的以下信息: 处理所有待处理的事件,调用事件回调,完成所有待处理的几何图形管理,根据需要重新绘制窗口小部件,并调用所有待处理的空闲任务。此方法应谨慎使用,因为如果从错误的位置(例如,从事件回调内部,或者从可以以任何方式从事件回调中调用的函数等)调用,则可能导致真正令人讨厌的竞争状况。 )。如有疑问,请改用。 另一方面,关于此功能: 调用所有待处理的空闲任

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