Firebase Firestore v9 最佳实践:ignoreUndefinedProperties 与条件 addDoc/updateDoc

Hes*_*uew 0 javascript firebase google-cloud-firestore

嘿,我刚刚更新了我的项目以使用 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,
    })
}
Run Code Online (Sandbox Code Playgroud)

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

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

编辑(这(添加编辑)也是继续并解决我的问题的最佳方式吗?我是新手,所以我也在寻找 StackOverflow 最佳实践)

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

Function updateDoc() called with invalid data. Unsupported field value: undefined (found in field exampleNotRequiredValue in document ...)
Run Code Online (Sandbox Code Playgroud)

因此,对于这种情况,最好
[1] 检查值是否未定义,在这种情况下将它们添加到更新对象
[2] 使用ignoreUndefinedProperties(因为这不是此设置的重点,这不会自动执行此检查而且我不需要改变很多功能?)

Dha*_*raj 6

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

如果您想使用,则ignoreUndefinedProperties必须使用:initializeFirestoregetFirestore

import { initializeFirestore } from "firebase/firestore"

const db = initializeFirestore(app, {ignoreUndefinedProperties: true})
Run Code Online (Sandbox Code Playgroud)