Как получить только документ Firebase, у которого есть c идентификатор дополнительного документа или есть альтернативный способ? - PullRequest
0 голосов
/ 03 марта 2020

Мне нужно получить документ, который содержит указанный c идентификатор под-документа для расчета максимальных и минимальных данных без запроса всей коллекции.

Структура документа похожа на эту.

Collection: Student
    /* unrelated field */
    The document
    Subcollection: Grade
      Document: Math
        Subcollection: Score
          Document: Johny

В запросе будут получены все данные, идентификатором поддокумента которых является Джонни, поэтому я могу рассчитать минимальный и максимальный баллы, которые Джонни оценивает для нормализации балла. .

Если есть альтернативный выбор структуры данных, который может это сделать sh, не стесняйтесь рекомендовать в качестве ответа. Я все еще могу перенести все данные, так как большинство документов не имеет подколлекций.

1 Ответ

0 голосов
/ 03 марта 2020

В вашей текущей структуре вы можете запросить ее следующим образом:

var JohnyScore = []
db.collection("Student").get().then(function(doc) {
    doc.collection("Grade").get().then(function(snapshot) {
        snapshot.forEach(function(doc2) {
            doc2.collection("Score").where("id", "==", "Johny").get().then(function(snapshot2) {
                JohnyScore.push(snapshot2.data());
            });
        });
    });
});

Однако это очень неэффективно, так как вы можете видеть, что вы выполняете 2 чтения + 1 чтение на оценку, если вы желая изменить свою структуру данных, было бы намного проще иметь ее так:

Collection: Student
   Document
      id: Johny
      Subcollection: Grade
         Document 
           id: Math
           score: 10
         Document
           id: History
           score: 8

И тогда вы могли бы запросить ее с помощью:

var JohnyScore = []
db.collection("Student").where("id", "==", "Johny").get().then(function(doc) {
    doc.collection("Grade").get().then(function(snapshot) {
        snapshot.forEach(function(score) {
            JohnyScore.push(score.data());
        });
    });
});

Что означало бы, что вы выполняете только 2 чтения.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...