#javascript #html #firebase #google-cloud-firestore
#javascript #HTML #firebase #google-cloud-firestore
Вопрос:
Как я могу получить все документы внутри вложенной коллекции «userPosts» в Firebase Firestore с помощью JavaScript? Вы можете увидеть структуру моей базы данных на рисунках ниже.
Вот что я пробовал:
firebase.auth().onAuthStateChanged(function(user) {
var postRef = database.collection('posts').doc().collection('userPosts');
postRef.get().then(snapshot => {
setupPosts(snapshot.docs)
})
const posts = document.querySelector('.posts');
const setupPosts = (data) => {
let html = '';
data.forEach(doc => {
const post = doc.data();
console.log(post)
const li = `
<li>
<div class="title">${post.title}</div>
<div class="content">${post.content}</div>
</li>
`;
html = li
})
posts.innerHTML = html;
}
})
Что должен сделать этот код, так это получить документы из вложенной коллекции «userPosts». И он должен входить в каждый документ в коллекции «posts», а затем переходить в «userPosts» и получать каждый документ в этой вложенной коллекции.
Комментарии:
1. Я не уверен, что понимаю. Можете ли вы показать, что вы уже пробовали, или почему код из этой документации у вас не работает? firebase.google.com/docs/firestore/query-data /…
2. Теперь я добавил код, который я пробовал!
Ответ №1:
Похоже, вам нужен запрос группы коллекций. Это даст вам все документы во всех вложенных коллекциях с именем «userPosts»:
const query = database.collectionGroup("userPosts")
query.get().then(querySnapshot => { ... })
Комментарии:
1. Я часами боролся с вложенными обещаниями и циклами (не работает), это спасло мне день!
Ответ №2:
Эта строка не имеет смысла:
var postRef = database.collection('posts').doc().collection('userPosts');
database.collection('posts').doc()
Создается ссылка на новый, несуществующий документ в posts
коллекции. Поскольку вы затем создаете его userPosts
вложенную коллекцию, это, конечно, не будет существовать / быть пустым.
Если вы хотите получить userPosts
вложенную коллекцию для своего user
аргумента, и вы сохраняете пользователей на основе их UID, тогда это будет:
var postRef = database.collection('posts').doc(user.uid).collection('userPosts');
Комментарии:
1. Но я не хочу получать конкретный документ с идентификатором UID в качестве идентификатора docID, я хочу получить каждый документ, а затем перейти в вложенную коллекцию, если вы понимаете.