gpt4 book ai didi

Firebase 查询收集和合并子集合数据

转载 作者:行者123 更新时间:2023-12-03 22:20:18 24 4
gpt4 key购买 nike

我试图找出一种方法来获取文档集合及其子集合数据。

例如,我的树是...

-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

})
})

如何从每个对象中获取组合数据(集合和子集合),然后将其推送到数组中?

赏金结构错误
每个月都应该是它自己的对象

最佳答案

使用移动/网络客户端库无法获得,一次查询 ,Firestore 文档的数据及其子集合文档的数据。

甚至无法获取文档的子集合列表(使用移动/网络客户端库),请参阅 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 .

关于Firebase 查询收集和合并子集合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52944587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com