在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和时间戳。
到目前为止,我能够做到这一点:
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
});
答案 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();
因为,如果客户更改了本地时间,您可能会得到错误的时间。