使用实时更新时如何检查 Cloud Firestore 文档是不是存在

Posted

技术标签:

【中文标题】使用实时更新时如何检查 Cloud Firestore 文档是不是存在【英文标题】:How to check if a cloud firestore document exists when using realtime updates使用实时更新时如何检查 Cloud Firestore 文档是否存在 【发布时间】:2018-04-03 11:14:15 【问题描述】:

这行得通:

db.collection('users').doc('id').get()
  .then((docSnapshot) => 
    if (docSnapshot.exists) 
      db.collection('users').doc('id')
        .onSnapshot((doc) => 
          // do stuff with the data
        );
    
  );

...但它似乎很冗长。我试过doc.exists,但没用。我只想检查文档是否存在,然后再订阅它的实时更新。最初的 get 似乎是对 db 的浪费调用。

有没有更好的办法?

【问题讨论】:

您是要完成插入/更新还是? 现在是db.collection('users').doc('id').ref.get() 【参考方案1】:

您的初始方法是正确的,但是将文档引用分配给如下变量可能会更简洁:

const usersRef = db.collection('users').doc('id')

usersRef.get()
  .then((docSnapshot) => 
    if (docSnapshot.exists) 
      usersRef.onSnapshot((doc) => 
        // do stuff with the data
      );
     else 
      usersRef.set(...) // create the document
    
);

参考:Get a document

【讨论】:

你拯救了我的一天。谢谢!【参考方案2】:

请检查以下代码。它可能会帮助你。

 const userDocRef = FirebaseFirestore.instance.collection('collection_name').doc('doc_id');
   const doc = await userDocRef.get();
   if (!doc.exists) 
     console.log('No such document exista!');
    else 
     console.log('Document data:', doc.data());
   

【讨论】:

【参考方案3】:

我知道它晚了,但它实际上是 snapshot.empty 而不是 snapshot.exists 。 snapshot.empty 检查文档是否存在并相应地返回。快乐编码?

【讨论】:

【参考方案4】:

如果您像我一样使用 php-Firestore 集成,请编写如下内容:

$firestore = new FirestoreClient();
$document = $firestore->document('users/john');
$snapshot = $document->snapshot();

if ($snapshot->exists()) 
   echo "John is there!";

享受吧! o/

【讨论】:

【参考方案5】:

请注意,在 Firebase v9(模块化 SDK)中,exists 是一种方法,而不是属性(它会一直为您提供 falsy 结果),如 docs 所述。

【讨论】:

以上是关于使用实时更新时如何检查 Cloud Firestore 文档是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何修复颤动的 cloud_firestore 依赖项?

将新数据添加到特定子项时如何使用 Cloud Functions 将数据写入 Firebase 实时数据库

Firestore / Cloud功能 - 如何在更改时更新Firestore数据

使用 Cloud Firestore 触发器功能时如何获取 dataID?

更新 Cloud Build ref 以显示它运行的正确分支

如何在 Cloud 函数中读取 Firestore 文档更新之前/之后的值?