我正在尝试找到一种方法来获取文档集合及其子集合数据。
例如,我的树是...
-locations
-{locationId}
-historic
-april
-airTemp: 12.4
-displayOrder: 4
-august
-airTemp: 14.5
-displayOrder: 9
-december
-airTemp: 13.5
-displayOrder: 12
etc..
......,其中locationId
是一个文档,historic
是其中包含每月文档的子集合。
我知道如何获取顶级集合项并将其存储到数组中,但我也想将其子集合数据(即jan,feb等)添加到每个文档中。
var locations = []
let ref = db.collection('locations')
db.collection('locations').get()
.then(snapshot => {
snapshot.forEach(doc => {
let location = doc.data()
location.id = doc.id
location.name = doc.name
// get the historic subcollection data here
})
})
如何从每个对象获取合并的数据(集合和子集合),然后将其推入数组中?
赏金结构错误 每个月应该是自己的对象
答案 0 :(得分:2)
对于移动/网络客户端库,无法通过一个查询获取Firestore文档的数据及其子集合文档的数据。< / p>
甚至无法获取文档的子集合列表(使用移动/网络客户端库),请参见https://firebase.google.com/docs/firestore/query-data/get-data#list_subcollections_of_a_document
因此,您需要知道子集合的名称才能查询它们(这是您的情况(名称='historic')。
您可以执行以下操作。首先,获得所有父文档,同时使用Promise.all()
并行查询所有“历史”子集合。
var db = firebase.firestore();
var promises = []
db.collection('locations').get()
.then(snapshot => {
snapshot.forEach(doc => {
let location = doc.data()
location.id = doc.id
location.name = doc.data().name
console.log(location);
promises.push(doc.ref.collection('historic').get());
})
return Promise.all(promises);
})
.then(results => {
results.forEach(querySnapshot => {
querySnapshot.forEach(function (doc) {
console.log(doc.id, " => ", doc.data());
});
});
});
请注意,results
数组的顺序与promises
数组的顺序完全相同。
还请注意,要获取文档项(例如name
)的值,您需要执行doc.data().name
而不是doc.name
。
答案 1 :(得分:0)
首先创建一个空数组,例如resultsArray = []
。使用简单或复合查询来获取您要阅读的文档。然后遍历resultDocuments,创建一个resultObject
记录所需的任何属性。在该迭代中,.push(resultObject)
到结果数组。