javascript - 如何将多个集合与 Firebase 合并?
问题描述
我需要显示来自 3 个集合的数据,然后按日期对它们进行排序。问题是我无法找到正确的数据结构来设置它。
我必须返回这样的对象:
data : {
total, // the total number of objects in collections
data // the data from all the three collections
}
这是我要设置的代码:
const fillAray = (callb) => {
let total = 0;
let totalData={}
for(let i=0;i<3;i++){
switch(i){
case 0:
historyPart='1st table'
break;
case 1:
historyPart='2nd table'
break;
case 2:
historyPart='3rd table'
break;
}
const collection_ref = admin.firestore().collection(`*****-${historyPart}`);
const user_transactions_ref = collection_ref.doc(uid).collection('transactions');
user_transactions_ref.orderBy('time', 'desc').get().then(
(snapshot) => {
if (!snapshot.empty) {
snapshot.forEach((doc) => {
++total;
});
}
user_transactions_ref.orderBy('time', 'desc').offset(from).limit(size).get().then(
(snapshot) => {
const out = [];
if (!snapshot.empty) {
snapshot.forEach((doc) => {
out.push(doc.data())
});
}
//merging data
Object.assign(totalData,out)
},
(error) => { callback(error, null); }
);
},
(error) => { callback(error, null); }
);
}
sendDataToFront(totalData,total)
// Here I'm supposed to have totalData and total with all datas
}
不知何故,对象没有正确合并......有什么想法吗?
解决方案
目前尚不清楚您要在这里实现什么,但合并多个查询的通用方法看起来像这样:
const refA = admin.firestore().collection('foo/A/widgets');
const refB = admin.firestore().collection('foo/B/widgets');
// fetch data in parallel
Promise.all([ refA.get(), refB.get() ])
// merge the results
.then(promiseResults => {
const mergedData = [];
promiseResults.forEach( snapshot => {
snapshot.forEach( doc => mergedData.push(doc.data()) );
});
return mergedData;
})
// sort the results
.then(mergedData => mergedData.sort((a, b) => a.timestamp - b.timestamp))
// use the results
.then(sortedData => {
// do something with data here
console.log(sortedData);
})
// log any errors
.catch(e => console.error(e));
推荐阅读
- php - Laravel Eloquent 的枢轴负载关系
- mysql - mySQL 查询返回 3 列,我想从连接到逗号分隔字符串的列中获取值
- php - PHP 从 SQL 查询中获取重复值的总量
- bash - Bash 逐行阅读。无法组合变量和字符串,变量已附加
- swift - Tableview 附件无法正确加载
- c# - Nunit 测试命名约定示例
- identityserver4 - 未调用 IdentitySever4 UserInteractionOptions 登录 url
- laravel - 如何使用 laravel eloquent 获得子查询的结果
- timer - 如何将顶级 GestureDetector 添加到 Flutter?
- coq - 有理数不等式有问题