Есть ли способ запросить коллекцию Firestore со многими «где» в цикле? - PullRequest
0 голосов
/ 19 июня 2019

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

const postsCol = await admin.firestore().collection('posts')
idsList.forEach(elem => {
  postsCol.where('sentBy', '==', elem)
})
postsCol.orderBy("sentAt", "desc").limit(5)

1 Ответ

3 голосов
/ 19 июня 2019

Для запроса коллекции Firestore, вам нужно использовать метод get() .

Выполнение const postsCol = await admin.firestore().collection('posts') не будет запрашивать базу данных, оно просто определяета CollectionReference.То же самое для postsCol.where('sentBy', '==', elem) или postsCol.orderBy("sentAt", "desc").limit(5): они определяют Query, но не извлекают базу данных.

Каждый запрос к коллекции с помощью метода get() является асинхроннымоперация: метод get() возвращает Promise, который разрешается с результатами запроса.

Поскольку вы хотите запустить несколько запросов параллельно, вы должны использовать Promise.all(),следующим образом:

const queries = [];

idsList.forEach(elem => {
   queries.push(admin.firestore().collection('posts').where('sentBy', '==', elem).get());
})

Promise.all(queries)
.then(results => {
  //Do whatever you want with the results array which is an array of QuerySnapshots
  //See https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot.html
})

Примечание: если вы используете этот код в облачной функции, не забудьте вернуть обещания, возвращаемые асинхронными операциями (включая обещаниевозвращается Promise.all()).

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