# #javascript #firebase #google-cloud-firestore
#язык JavaScript #огневая база #google-облако-firestore
Вопрос:
async function process_tasks() { let campaignsRef = db.collection('campaigns') let activeRef = await campaignsRef.where('active', '==', true).select().get(); for (campaign of activeRef.docs) { console.log(campaign.id); (CHOICE 1) let tasksRef = await campaignsRef.doc(campaign.id).collection('tasks').get(); (CHOICE 2) let tasksRef = await campaign.collection('tasks').get(); for(task of tasksRef.docs) { console.log(task.id, task.data()) } } }
Когда я использую (ВЫБОР 2) , «Ссылка на документ» не является допустимым отображением ОШИБКИ ссылки на документ.
В моем коде нет переменной с именем documentRef( в качестве примечания для тех, кто ошибочно так думает).
Интересно, почему? не должно campaign
быть равно campaignsRef.doc(campaign.id)
?
Комментарии:
1. В вашем коде нет переменной
documentRef
(как указано в ошибке). Вы уверены, что ошибка исходит из этого кода?2. Где находится переменная
documentRef
? Можете ли вы опубликовать всю ошибку целиком?3. Как я понимаю
campaign
, этоdocumentRef
. Я думаю, что вы не можете использовать.collection
наdocumentRef
А. @ФранкванПуффелен4. В сообщении об ошибке говорится, что есть переменная с именем
documentRef
, которая, как ожидается, будет иметь типDocumentReference
. В коде нет переменной с именемdocumentRef
, отсюда мой вопрос.5. @FrankvanPuffelen Могу ли я знать, почему вы думаете, что в моем коде есть переменная с именем documentRef?
Ответ №1:
Все, что вы написали на вторых выборах, верно, за исключением одной вещи. Переменная (кампания), созданная в цикле for, называется DocumentSnapshot. Вы должны использовать .ref
для доступа ссылку из DocumentSnapshot.
async function process_tasks() { let campaignsRef = db.collection('campaigns') let activeRef = await campaignsRef.where('active', '==', true).select().get(); for (campaign of activeRef.docs) { //campaign is DocumentSnapshot console.log(campaign.id); (CHOICE 1) let tasksRef = await campaignsRef.doc(campaign.id).collection('tasks').get(); (CHOICE 2) let tasksRef = await campaign.ref.collection('tasks').get(); // add .ref after campaign for(task of tasksRef.docs) { console.log(task.id, task.data()) } } }
Спасибо.
Комментарии:
1. так
campaign
же как и снимок документа, который является .documentref
Мы должны в дальнейшем использовать.ref
, чтобы получитьDocumentReference
?2. совершенно правильно, вы должны использовать .ref, чтобы получить ссылку на документ из DocumentSnapshot. пример: var documentSnapshot = db.коллекция(«кампания»). doc(…).get(); var DocumentReference = documentSnapshot.ref;
3. вы герои в stackoverflow…… Это задокументировано? Я просто не смог найти в документации firestore…