gpt4 book ai didi

javascript - 如何从 firestore 两个集合中获取数据并将所有数据合并在一起

转载 作者:行者123 更新时间:2023-12-05 06:48:44 25 4
gpt4 key购买 nike

首先我尝试从排行榜集合中获取数据,然后我尝试获取用户详细信息
并将数据添加到 winnerlist 数组中,但它无法正常工作。

  1. 获奖名单顺序不正确
  2. 返回res.send({获胜者名单:结果});部分也不工作

最好的方法是什么?我在这里做错了什么?我对这个有点陌生请帮助我我期望的是包含所有用户详细信息和正确顺序的 winnerlist 数组。

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 函数中,我想这会起作用:

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 });

关于javascript - 如何从 firestore 两个集合中获取数据并将所有数据合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66749098/

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