# #javascript #firebase #google-cloud-firestore #nosql
Вопрос:
Мне было интересно, как я могу запрашивать документы из коллекции firestore из массива идентификаторов? Мне нужны только документы в коллекции, которые находятся в массиве идентификаторов. Я посмотрел на другой ответ и думаю, что мой подход верен, однако я получаю ошибку.
(node:15105) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'data' of undefined
> at /Users/username/SideProjects/projectname/functions/index.js:40:38
> at processTicksAndRejections (internal/process/task_queues.js:95:5)
Ошибка возникает из-за того, что функция не находит никаких документов в коллекции из этого массива идентификаторов. Тем не менее, я дважды проверил базу данных и знаю, что в коллекции есть документы с идентификаторами из массива.
const admin = require('firebase-admin')
....
let feedItems = db.collection(feedItemsCollection)
feedItemsList = feedItems.where(admin.firestore.FieldPath.documentId(), 'in', ['HPOorsSnbHpTYwwXxfWw']).get().then(snapshot2 => {
console.log(admin.firestore.FieldPath.documentId())
console.log("In feed Items")
//console.log(feedItemIds)
console.log(snapshot2[0])
//error happens on this line because snapshot2[0] returns undefined
console.log(snapshot2[0].data())
})
Snapshot2[0] возвращает неопределенное, что, как я предполагаю, означает, что данные не возвращались. Я думаю, что неправильно вызываю documentId (), но не знаю исправления.
Комментарии:
1.
snapshot2
не является массивом, поэтому вы не можете индексировать его таким образом.
Ответ №1:
Там «может быть» две проблемы с вашим кодом. Следуйте обоим пунктам, чтобы убедиться, что все работает
- Данные внутри
snapshot2
, возможноempty
Сначала вам нужно будет исправить свой код, чтобы проверить эту теорию. Вы неправильно получаете доступ к данным snapshot2
. Чтобы сделать это правильно, один из способов заключается в следующем:
// `snapshot2` will have a `docs` property that you can leverage
const snapshot2Data = snapshot2.docs.map((doc) => doc.data());
.documentId()
возможно, он делает не то, что должен (как вы сказали)
Чтобы проверить эту теорию, проверьте snapshot2Data
, пуста ли она. Бежать :
console.log(snapshot2Data); // what do you get ?
Если нет, он не пуст и вы получили данные обратно, то все готово. Больше делать нечего
Если да, он пуст, то запустите :
console.log(admin.firestore.FieldPath.documentId()); // what do you get ?
Ты получил ответ string
«а»? Если нет, то у нас есть еще одна проблема. Вам также нужно будет более внимательно изучить вашу firebase-admin
настройку.