我从一个集合中获取一组文档ID,我试图用这些ID来查询另一个集合。这是我的查询的样子:
firebase
.firestore()
.collection("users")
.doc(this.props.userID)
.get()
.then((snapshot) => {
const postIDs = snapshot.data().posts;
firebase
.firestore()
.collection("posts")
.where(firebase.firestore.FieldPath.documentId(), "in", postIDs)
.orderBy("timestamp")
.get()
.then((snapshot) => {
console.log(snapshot.data());
});
});
这是说snapshot.data()
是未定义的,因此我认为查询有问题。我可以确认postIDs
中有有效的ID。
数据库的结构如下:
users:
-- user with userID
---- displayName
---- etc.
---- posts (array of postIDs)
posts:
-- post with postID
答案 0 :(得分:3)
调用collection().get()
时,响应不包含data()
或id
属性,因为它返回了多个文档(理论上无论如何都如此),因此您只能通过{ {1}}属性,即使只有一个文档与查询匹配。
因此,如果要访问与查询匹配的文档,请执行以下操作:
docs
如果您在查询中指定了一个文档,则只能调用firebase.firestore()
.collection("posts")
.where(firebase.firestore.FieldPath.documentId(), "in", postIDs)
.orderBy("timestamp")
.get()
.then((snapshot) => {
const posts = snapshot.docs.map(doc => doc.data());
console.log(posts);
...
}
或snapshot.data()
:snapshot.exists
就像在第一次查询中一样。如果不是,请参阅snapshot.docs