[英]how can get data from firestore two collections and merge all data together
首先我嘗試從排行榜集合中獲取數據,然后我嘗試獲取用戶詳細信息
並將數據添加到獲勝者列表數組中,但它不能按我的意願工作。
做這個的最好方式是什么? 我在這里做錯了什么? 我對此有點陌生,請幫助我期待的是帶有所有用戶詳細信息和正確順序的獲勝者列表數組。
const leaderboardsCollectionRef = db.collection('leaderboards');
const usersCollectionRef = db.collection('users');
const winnerList = [];
const promise1 = new Promise((resolve, reject) => {
leaderboardsCollectionRef.orderBy('weeklyPoints', 'desc').limit(13).get().then(async results => {
results.forEach(async doc => {
return new Promise((resolve, reject) => {
const users = usersCollectionRef.where("uid", "==", doc.id).get().then(async snapshot => {
snapshot.forEach(async doc => {
winnerList.push({
[doc.id]: doc.data()
});
});
resolve(winnerList);
}).catch(err => {
functions.logger.error('ERR =>', err);
reject(err);
});
});
});
}).catch(err => {
functions.logger.error('ERR =>', err);
reject(err);
});
});
Promise.all([promise1])
.then((result) => {
console.log('result', result)
return res.send({
winnerList: result
});
}).catch(err => {
functions.logger.error('ERR =>', err);
});
假設您將其包裝在async
function 中,我想這將起作用:
const leaderboardsRef = db.collection('leaderboards');
const usersCollectionRef = db.collection('users');
const winnerList = [];
const resultsQuery = leaderboardsRef.orderBy('weeklyPoints', 'desc').limit(13);
const resultsSnapshot = await resultsQuery.get();
const uids = [];
resultsSnapshot.forEach(doc => {
uids.push(doc.id);
});
for (const uid of uids) {
const userRef = usersCollectionRef.doc(uid);
const userSnapshot = await userRef.get();
winnerList.push({ [uid]: userSnapshot.data() });
}
res.send({ winnerList });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.