如何在Firestore中获取嵌套参考数据?

时间:2019-04-18 07:44:28

标签: firebase google-cloud-firestore

我正在尝试按日期获取数据并在Firestore中呈现html, 但是我不能。

顺序错误。 因为,数据是按用户排序的。 如何按日期获取数据?

{
  comments: {
    comment_1: {
     userRef: users/user_1,
     body: "body",
     createdAt: Timestamp,
    },
    comment_2: {
      userRef: users/user_2,
      body: "body",
      createdAt: Timestamp,
    },
    comment_3: {
      userRef: users/user_1,
      body: "body",
      createdAt: Timestamp,
    },
  },
  users: {
    user_1 : {
     name: "test"
    },
    user_2 : {
     name: "test"
    },
  }
}


db.collection('comments').orderBy('createdAt').get().then(snapshot=> {
    const comment = snapshot.data();
    comment.userRef.get().then(userSnapshot => {
      const userData = userSnapshot.data();
      const comment = document.getElementById('js-comment');
      const element = document.createElement('div')
      element.innerHTML = `<p>${comment.body}</p>`
      comment.appendChild(element);
    });
});

1 个答案:

答案 0 :(得分:0)

您需要像在代码中一样使用orderBy日期字段对数据进行排序,但是,在提供的数据模型中没有创建字段。

如果您的评论数据如下

comments: {
    comment_1: {
     userRef: users/user_1,
     body: "body",
     createdAt: Timestamp
    },
    comment_2: {
      userRef: users/user_2,
      body: "body",
      createdAt: Timestamp
    },
    comment_3: {
      userRef: users/user_1,
      body: "body",
      createdAt: Timestamp
    },

可以通过在创建数据时使用Timestamp.now()使Firestore填充该字段来填充timestamp字段。

使用orderBy读取注释后,将读取数据。如果要使数据按升序排列,则需要指定ASCENDING,然后可以查询用户,并且数据应以正确的顺序出现。

https://firebase.google.com/docs/firestore/query-data/order-limit-data

对此进行了更多讨论