Как мне получить вложенные справочные данные в firestore?

#firebase #google-cloud-firestore

# #огневая база #google-облако-firestore

Вопрос:

Я пытаюсь получить данные по датам и отобразить html в firestore, но у меня это не получается.

Порядок неправильный. Потому что данные сортируются по пользователям. Как мне получить данные по дате?

 {
  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:

Вам необходимо отсортировать данные с помощью OrderBy по полю даты, как у вас есть в коде, однако у вас нет поля createdAt в предоставленной вами модели данных.

Если ваши данные комментариев выглядят следующим образом

 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
    },
 

Поле метки времени можно заполнить, попросив firestore заполнить поле с помощью Timestamp.now() при создании данных.

После того, как данные будут прочитаны, используйте OrderBy для комментариев. Вам нужно указать ВОЗРАСТАНИЕ, если вы хотите, чтобы данные были в порядке возрастания, тогда пользователи могут быть просмотрены, и данные должны отображаться в правильном порядке.

Подробнее об этом здесь https://firebase.google.com/docs/firestore/query-data/order-limit-data

Комментарии:

1. Спасибо, что ответили. извините, я уже добавил createdAt. Я просочился наружу.

2. Привет. не уверен, что утечка означает