Firestore 루트 컬렉션의 모든 문서 및 하위 컬렉션 가져오기
내가 이런 구조를 가지고 있다고 말합니다.
A (collection): {
a (doc): {
name:'Tim',
B (collection):{
b (doc): {
color:'blue'
}
}
}
}
어디에A
그리고.B
수집하는 동안a
그리고.b
문서입니다.
루트 문서에 포함된 모든 내용을 하나의 쿼리로 가져올 수 있는 방법이 있습니까?
이렇게 쿼리하면
db.collection("A").doc("a").get()
나는 단지name:'Tim'
필드. 제가 원하는 것은 또한 B의 모든 서류를 받는 것입니다.
기본적으로 내 질문이 돌아오기를 바랍니다.
{
user:'Tim',
B (collection):{
b (doc): {
color:'blue'
}
}
}
가능합니까? 아니면 정말로 각 컬렉션에 대해 하나씩 여러 개의 쿼리를 만들어야 합니까? :/?
사용자 프로필을 나타내는 매우 깊은 중첩된 컬렉션 트리가 있다고 가정하면 사용자 프로필을 로드할 때마다 읽기 요청이 여러 번 발생하기 때문에 비용이 엄청나게 증가할 것입니다.1 x N
여기서 N은 내 나무의 깊이입니다 :/.
각 풀의 비용이 걱정되는 경우 완벽한 구조를 위해 선호하는 것이 아니라 공통된 뷰/풀 요구에 따라 데이터를 구성해야 합니다.매번 이러한 항목을 하나로 묶어야 하는 경우, 실제로 문서의 하위 컬렉션일 필요가 없는 항목에 대해 "맵"을 사용하는 것을 고려하십시오.
이 예에서 "기본 설정"은 지도입니다.
{
user: "Tim",
preferences: {
color: "blue",
nickname: "Timster"
}
}
각 문서의 크기도 1MB로 제한됩니다. 따라서 로그 레코드와 같이 확장되고 계속 확장되는 것을 이 사용자를 위해 저장해야 하는 경우 로그를 원하는 경우에만 풀링되는 하위 컬렉션으로 분할하여 각 로그 항목을 별도의 문서로 만드는 것이 좋습니다.또한 모든 사용자에 대한 모든 로그를 별도의 상위 컬렉션에 저장할지 또는 각 사용자의 하위 컬렉션에 저장할지 여부는 로그를 어떻게 풀링할 것인지, 풀링 비용과 균형을 맞춰 빠른 속도를 낼 것인지에 따라 결정됩니다.이 사용자에게 최근 10건의 검색을 표시할 경우 검색 로그가 하위 컬렉션으로 적합합니다.분석을 위해 모든 사용자에 대한 모든 검색 데이터를 풀링하는 경우 한 번에 모든 로그를 풀링하여 각 사용자의 로그를 개별적으로 풀링할 필요를 방지할 수 있으므로 별도의 상위 수준 컬렉션이 적합합니다.
당신은 또한 편리한 목적을 위해 당신의 당김과 약속을 함께 묶을 수 있습니다.
// Get reference to all of the documents
console.log('Retrieving list of documents in collection');
let documents = collectionRef
.limit(1)
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
console.log('Parent Document ID: ', doc.id);
let subCollectionDocs = collectionRef
.doc(doc.id)
.collection('subCollection')
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
console.log('Sub Document ID: ', doc.id);
});
})
.catch((err) => {
console.log('Error getting sub-collection documents', err);
});
});
})
.catch((err) => {
console.log('Error getting documents', err);
});
Cloud Firestore에서 쿼리를 실행하는 것은 기본적으로 매우 간단합니다.이러한 유형의 쿼리는 지원되지 않지만, Google이 향후 고려할 수도 있습니다.
할 수 수가 수 Matt R 답변대추에하, babel 사비사아/기을를용수경있할우는용여하있더수, 적은코드로동다니얻습결오니을일한를과가거동나기아▁with▁adding(,▁result▁same▁if).catch
/then
):
// Get reference to all of the documents
console.log("Retrieving list of documents in collection");
let documents = await collectionRef.get();
documents.forEach(async doc => {
console.log("Parent Document ID: ", doc.id);
let subCollectionDocs = await collectionRef.doc(doc.id).collection("subCollection").get()
subCollectionDocs.forEach(subCollectionDoc => {
subCollectionDoc.forEach(doc => {
console.log("Sub Document ID: ", doc.id);
})
});
});
언급URL : https://stackoverflow.com/questions/46875966/firestore-get-all-docs-and-subcollections-of-root-collection
'programing' 카테고리의 다른 글
루비로 된 디렉토리에서 모든 파일을 요구하는 가장 좋은 방법은 무엇입니까? (0) | 2023.07.06 |
---|---|
MySqlariaDB CREATE FUNCTION DELMITER가 작동하지 않습니다.근처에 오류가 있습니다. (0) | 2023.07.06 |
SQL Server의 모든 데이터베이스 테이블 간의 관계 파악 (0) | 2023.07.06 |
오라클 테이블에 자동으로 날짜 채우기 (0) | 2023.07.06 |
최신 버전의 gcc에서 c11을 활성화하는 방법은 무엇입니까? (0) | 2023.07.01 |