【问题标题】:How to check if document exist on SET and WHERE如何检查 SET 和 WHERE 上是否存在文档
【发布时间】:2019-04-28 16:37:29
【问题描述】:

我正在尝试更新 PITA 非规范化数据库结构。 我知道已经有关于如何检查文档是否存在于 get 上的答案,甚至文档都非常清楚,但我找不到任何可以检查文档是否存在于更新“set”和“where”上的东西。

首先我想在更新前检查一个文档是否存在

 const staffRef = db.collection("staff").doc(uid)

    return staffRef.set({
        employeeProfile: employeeProfile
    }, {
            merge: true
        })...

有什么方法可以检查该文档是否存在于片场,或者我应该先阅读它以了解该文档是否像这样存在

    const staffRef = db.collection("staff").doc(uid)
    return staffRef.get()
        .then((doc) => {
            if (doc.exists) {
                return staffRef.set({
                    employeeProfile: employeeProfile
                }, {...

第二我要检查多个文档的位置

const staffRef = db.collection("staff").where("employerId", "==", uid)
    const batch = db.batch()

    return staffRef.get()
        .then((querySnapshot) => {
            querySnapshot.forEach((doc) => {
                batch.update(doc.ref, { employerProfile: employerProfile })
            })...

如果存在,我应该在 forEach 之后阅读每个文档吗?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    首先回答:是的,对于单个文档,您必须首先使用get() 方法来确定该文档是否存在。

    对于指向不存在文档的DocumentSnapshot, 任何数据访问都将返回“未定义”。您可以使用exists 属性来显式验证文档的存在。

    第二个回答:不,如果是Query的结果,你不需要检查每个文档:你通过循环使用querySnapshot.forEach()得到的每个doc确实存在.

    QuerySnapshot 包含零个或多个 DocumentSnapshot 表示查询结果的对象。

    【讨论】:

    • 嗨雷诺。第二:如果没有与该搜索匹配的文档怎么办?如何防止出错呢?
    • @ptr.chov 只需使用QuerySnapshotempty()方法,见firebase.google.com/docs/reference/js/…
    • 谢谢。这正是我需要知道的
    • @ptr.chov PS:请注意,使用set(),您实际上不需要现有文档(当然,除非您自己的功能要求需要此文件),而 update() 你确实需要它。
    • 刚刚注意到该错误只是因为 profileImg 不存在...我刚刚阅读了有关 update() 方法的信息,我将对其进行更改,否则它只会创建一个文档,我不想要。我不明白我怎么会错过这个
    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多