【问题标题】:Firebase Firestore v9 best practices: ignoreUndefinedProperties vs. conditional addDoc/updateDocFirebase Firestore v9 最佳实践:ignoreUndefinedProperties 与条件 addDoc/updateDoc
【发布时间】:2021-09-01 13:27:23
【问题描述】:

嘿,我刚刚更新了我的项目以使用 Firebase 版本 9 模块化。现在,在重构代码之后,我想知道哪种方式可以获得理想的结果:
有一个文档有几个必填字段(比如说:姓名、姓氏)。现在我想添加/更新该文档,但它有多个不需要的字段。

实现此目的的最佳做法是什么?有条件地添加/更新 [1] 或使用“ignoreUndefinedProperties”[2]?

[1] 条件添加/更新...

if(address){
  await updateDoc(
    doc(db, collection, id), {
      name,
      lastName,
      address,
    })
} else {
  await updateDoc(
    doc(db, collection, id), {
      name,
      lastName,
    })
}

[2] 忽略未定义属性...

我也找不到关于如何在新版本中使用“ignoreUndefinedProperties”的文档,所以有人可以指导我正确使用。

EDIT(这也是(添加 EDIT)继续和细化我的问题的最佳方式吗?我是新手,所以我也在寻找 StackOverflow 最佳实践)

我正在测试必需的值,但我应该如何处理不需要的值?
我有多个集合和对它们的 +20 调用,在许多情况下只需要 2-4 个值,而可能有 20 个不需要的值。
这样,如果任何这些不需要的值未定义并且在 updateDoc() 中,我会收到以下错误...

Function updateDoc() called with invalid data. Unsupported field value: undefined (found in field exampleNotRequiredValue in document ...)

所以对于这种情况是不是更好
[1] 检查值是否未定义,在这种情况下将它们添加到更新对象
[2] 使用 ignoreUndefinedProperties (这不是这个设置的重点,这不是自动检查,我不需要更改很多功能吗?)

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    "ignoreUndefinedProperties" 可能不是最佳选择。如果 name 是必需的,但由于任何原因未定义,则不会将其写入文档。您可以编写安全规则来检查是否存在 namenickname 字段,但最好有条件地将字段添加到更新对象并确保存在所需的字段。

    如果您想使用ignoreUndefinedProperties,则必须使用initializeFirestore 而不是getFirestore

    import { initializeFirestore } from "firebase/firestore"
    
    const db = initializeFirestore(app, {ignoreUndefinedProperties: true})
    

    【讨论】:

    • 为什么有条件地添加字段来更新对象比只使用ignoreUndefinedProperties更好,因为忽略设置不会自动减少需要编写的代码?
    • @Hessuew 我已经在回答中解释了这一点。如果由于任何原因未定义所需的“名称”,则不会将其添加到文档中。所以从技术上讲,它不是必填字段,除非您添加一个已定义的检查,否则使用 ignoreUndefinedProperties 应该不是问题。
    • 啊,你是对的,我问错了问题点(当然,必填字段应该检查它们是否存在并且有价值)。我将在我的原始问题中添加转发问题作为编辑以指出我的意思
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2019-06-07
    • 2021-11-08
    • 2020-03-16
    • 2011-02-23
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多