在多个文档ID中的Firestore

时间:2020-08-08 04:46:17

标签: node.js firebase google-cloud-firestore

我从一个集合中获取一组文档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

1 个答案:

答案 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