Как ограничить записи, возвращаемые методом get () FireBase firestore? - PullRequest
0 голосов
/ 02 октября 2018

По вопросу, я хочу получить записи по времени.

например

users:(collection) {
      uid(document) : {
          uid(field) : 'someuid',
          name(field) : 'somename',
          messages(subcollection) : {
            '1538484652672'(document) :  {
                 text(field) : 'somemessages',
                 time(field) : 1538484652672,
            }
            '1538483652672'(document) :  {
                 text(field) : 'somemessages',
                 time(field) : 1538483652672,
            }
            '1538483652672'(document) :  {
                 text(field) : 'somemessages',
                 time(field) : 1538483652672,
            }
            .
            .
            .
            .
            .
            (possible many thousands entries)
          }
       },
       uid : {
       }
    }

Пользователь - это коллекция, внутри которой это имя - документ, а сообщения - это подколлекция.

А в сообщениях подколлекции ключ подобен сборке из

console.log(new Date().getTime());

Я хочу получить все сообщения, опубликованные сегодня и вчера.

Моя неудачная попытка:

let backYesterday = new Date(today.getFullYear(), today.getMonth() , today.getDate()-1).getTime();
db.collection('users').where("uid","==",uid).collection('messages')
                     .where("time" , '>' , backYesterday).get()
                     .then(function(querySnapshot) {
                        console.log(querySnapshot);
                        querySnapshot.forEach(function(doc) {
                            console.log(doc.id, " => ", doc.data());
                        });
                    })
                    .catch(function(error) {
                        console.log("Error getting documents: ", error);
                    });

OUTPUT
Пользовательская функция сработала, начало выполнения Выполнение заняло 3987 мс, пользовательская функция успешно завершена

Я не знаю, в чем дело.

1 Ответ

0 голосов
/ 02 октября 2018

Вы пытаетесь получить вложенную коллекцию из запроса, что невозможно.Вы можете получить вложенную коллекцию только из определенного документа.Это означает, что сначала вам нужно выполнить запрос, чтобы найти документ (ы), соответствующий вашему условию.

Поскольку кажется, что ваш документ назван по тому же UID, к которому вы обращаетесь, вы также можетеуйти без запроса:

var userDoc = db.collection('users').doc(uid)
userDoc.collection('messages')
       .where("time" , '>' , backYesterday).get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...