如何确定Firestore(节点)中是否存在记录

时间:2019-01-04 07:52:25

标签: javascript node.js firebase firebase-realtime-database google-cloud-firestore

在Firebase数据库中是如此简单,而我在Firestore中无法完成。我只需要知道指定文档中是否存在记录即可。

const user = firebase.auth().currentUser.uid;
const currentPostId = this.posts[index].id;
const ref = db.collection(`likes`).doc(`${currentPostId}`); // need to know if this doc has records

帖子具有记录存储,其中仅包含喜欢该帖子的用户ID和时间戳。

enter image description here

到目前为止,我能够做到这一点:

const ref = db.collection(`likes`).doc(`${currentPostId}`);

  ref
    .get()
    .then(snapshot => {
      console.log("Exists?" + snapshot.exists); //true
    })

但是对于我的一生,我只是找不到找到更深层次的方法。

const ref = db.collection(`likes`).doc(`${currentPostId}/${user}`); //invalid reference segments must be odd numbers

const ref = db.collection(`likes`).doc(currentPostId).collection(user) //undefined

我花了三天时间尝试不同的方式。在Firebase数据库中,它只是:

var ref = firebase.database().ref("users/ada");
ref.once("value")
  .then(function(snapshot) {
    var a = snapshot.exists();  // true
    var b = snapshot.child("name").exists(); // true
    var c = snapshot.child("name/first").exists(); // true
    var d = snapshot.child("name/middle").exists(); // false
  });

1 个答案:

答案 0 :(得分:0)

您可以阅读文档并检查文档中是否包含带有用户ID的字段。

const ref = db.collection(`likes`).doc(currentPostId);

ref
.get()
.then(doc => {
  console.log("Exists?" + doc.exists); //true
  if(doc.exists){
     var documentData = doc.data();
     // Check whether documentData contains the user id 
     if (documentData.hasOwnProperty(userId)) {
        // do something
     }
  }
})

上面的代码未经测试,但可以正常工作。

提示!您可以并且应该存储时间戳,这些时间戳是在客户端使用Firestore服务器时间戳生成的:

admin.firestore.FieldValue.serverTimestamp();

因为,如果客户更改了本地时间,您可能会得到错误的时间。