#reactjs #firebase #google-cloud-firestore
#reactjs #firebase #google-облако-firestore
Вопрос:
я не знаю, как получить доступ к нескольким документам внутри документа с неизвестным именем. Вот моя структура Firebase Firestore:
- бизнес
- unknownbusinessid1
- Рекламные акции
- unknownpromotionid1
- unknownpromotionid2 (…)
- Рекламные акции
- unknownbusinessid2 (…)
- unknownbusinessid3 (…)
- unknownbusinessid1
чего я хотел бы добиться, так это получить все рекламные документы (unknownpromotionid1, unknownpromotionid2 и т.д.), Не зная бизнес-идентификаторов (unknownbusinessid1, unknownbusinessid2, unknownbusinessid3 и т.д.)
это должно быть что-то вроде этого:
const getItem = db.doc(`BUSINESS/$whatever`).collection("PROMOTIONS")
.get().then((snapshot) => {
snapshot.docs.map(doc => {
console.log("this is your promotion", doc)
})
return promotionsArray
})
как это можно сделать?
Спасибо!
Комментарии:
1. Вы не можете сделать это с помощью одного запроса. Вам придется запрашивать каждую вложенную коллекцию по отдельности, чтобы получить все документы.
Ответ №1:
Вы можете использовать запрос группы коллекций, как описано в документах, он позволяет получать доступ к вложенным коллекциям с определенным именем из всех документов одновременно:
db.collectionGroup('PROMOTIONS').get().then(snapshot => {
snapshot.forEach(doc => {
console.log("this is your promotion", doc)
}
});
Обратите внимание, что вам нужно будет установить индекс, а также соответствующее правило безопасности для Firestore:
match /{path=**}/PROMOTIONS/{id} {
allow read: if true;
}
Комментарии:
1. Потрясающе, спасибо! Куда мне добавить правило безопасности? (извините, если это очевидно, все еще учусь)
2. будет ли это в консоли firestore таким образом?
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } match /{path=**}/PROMOTIONS/{id} { allow read: if true; } } }
3. Отлично, вы нашли его! Вы можете написать свои правила либо в файле firestore.rules, либо непосредственно в консоли Firebase.
4. Ваше правило выглядит хорошо для меня, вы можете проверить с помощью игровой площадки правил в консоли.