在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和时间戳。

javascript - 如何确定Firestore( Node )中是否存在记录-LMLPHP

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

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
  });

最佳答案

您可以阅读文档,并检查文档是否包含带有用户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();


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

10-05 20:48
查看更多