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

FiRecovery方法docRef.set和docRef.update之间的区别?[复制]

胡翔
2023-03-14

想象一下,我将以下文档存储在我的FiRecovery中。

collection: "myColection"
  document: "myDocument"
    fields:
      someBoolean: true
      someArray: ['a','b','c']
      etc

Firebase文档-源

问题

执行以下方法来切换某个Boolean字段有什么区别:

选项1

const docRef = db.collection('myCollection').doc('myDocument');

await docRef.set({
  someBoolean: false
  }, 
{merge: true});

选项2

const docRef = db.collection('myCollection').doc('myDocument');

await docRef.update({
  someBoolean: false
});

共有3个答案

酆恩
2023-03-14

>

设置{合并:true}将更新文档中的字段或在找不到时创建

更新将更新字段,但如果文档不存在,将引发错误

一个重要的细节,用set你必须提供路径:

set({ foo: { bar: { baz: true } } }, { merge: true })

更新,这就足够了

update({
  'foo.bar.baz': true
})
长孙修远
2023-03-14

您可以找到关于{merge:true}集和update集之间差异的答案

简而言之,设置合并将创建新字段/文档,如果它们不存在,而更新将失败,如果文档不存在。

此外,update函数对嵌套值的工作方式也不同。它将替换嵌套对象,而set将新值与当前值合并。

陈哲
2023-03-14

如果您已经将myDocument文档存储在myCollection集合中,则不会有任何区别。

如果没有现有的myDocument文档,则会出现差异:set()将起作用,但不会更新()。

查看文档https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentReference#update,表示“如果应用于不存在的文档,则更新将失败。”

 类似资料:
  • 本文向大家介绍镜像和复制之间的区别,包括了镜像和复制之间的区别的使用技巧和注意事项,需要的朋友参考一下 镜射 镜像是指为主数据库服务器保留备份数据库服务器。如果由于某种原因主数据库已关闭,则可以将镜像数据库用作主数据库的备用数据库。原则上,一次只有一台数据库服务器处于活动状态,并且仅从一台处于活动状态的服务器提供对数据库的请求。 复写 复制是指保持数据库的多个副本分布在多个地理位置。复制的经典示例

  • 问题内容: 我知道,无论与就将计算在东西在AngularJS变化。但是无法理解两者之间到底有什么区别。 我最初的理解是为角表达式计算的,这些角表达式是HTML端在执行函数时所执行的条件。我的想法是否正确? 问题答案: $observe() 是Attributes对象上的一种方法,因此,它只能用于观察/监视DOM属性的值更改。仅用于/调用内部指令。当您需要观察/观察包含插值的DOM属性(即{{}})

  • 问题内容: 我在阅读PEP 0008(样式指南)时,发现它建议在实例方法中使用self作为第一个参数,而在类方法中使用cls作为第一个参数。 我已经使用并编写了一些类,但从未遇到过类方法(嗯,一种将cls作为参数传递的方法)。有人可以告诉我一些例子吗? 谢谢! 问题答案: 实例方法 创建实例方法时,第一个参数始终为。您可以随意命名,但含义始终相同,并且由于其是命名约定,因此应使用。 (通常)在调用

  • 问题内容: 之间有什么区别 和 问题答案: 在Django的查询集文档都对这个很清楚的: 返回与给定查找参数匹配的对象,该参数应采用“字段查找”中所述的格式。 如果找到多个对象,则get()会引发MultipleObjectsReturned。MultipleObjectsReturned异常是模型类的属性。 如果找不到给定参数的对象,则get()会引发DidNotExist异常。此异常也是模型类

  • 问题内容: 用修饰的功能和用修饰的功能有什么区别? 问题答案: 也许有点示例代码将有助于:发现其中的差别在调用签名,并且: 以下是对象实例调用方法的常用方法。对象实例,a作为第一个参数隐式传递。 使用时,对象实例的类作为第一个参数而不是隐式传递。 你也可以使用该类进行呼叫。实际上,如果你将某些东西定义为类方法,则可能是因为你打算从类而不是从类实例调用它。本来会引发,但效果很好: 人们发现类方法的一

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子: