我得第一条查询结果:
[{
"_id": "63807adbe78529ed328257b3",
"email": "zanghai@xxx.com",
"rewards": [{
"date": "2022-08-13 00:00:00",
"reward": "周:人物周刊"
}]
}, {
"_id": "63807adbe78529ed328257b5",
"email": "yangze@xxx.com",
"rewards": [{
"date": "2022-08-20 00:00:00",
"reward": "周:人物周刊"
}, {
"date": "Q3",
"reward": "签框英雄"
}, {
"date": "Q2",
"reward": "季度之星"
}]
}]
我得第二条查询结果:
[{
"_id": "6380890fe18762bdfe8017e6",
"name": "周:人物周刊",
"integral": 5
}, {
"_id": "6380890fe18762bdfe8017f3",
"name": "签框英雄",
"integral": 15
}, {
"_id": "6380890fe18762bdfe8017f9",
"name": "季度之星",
"integral": 40
}]
我现在想合并两条查询结果获得如下格式数据:
[{
"_id": "63807adbe78529ed328257b3",
"email": "zanghai@bj.baidu.com",
"integral": 5
}, {
"_id": "63807adbe78529ed328257b5",
"email": "yangze@bj.baidu.com",
"integral": 60
}]
也就是一个新的数组变量,其中每个元素包含 email 以及与第二条数据中匹配的 integral 数组累加
以下是我的代码:
let ranking = []
let userRewards = await mongoose.userRewards.find() // 第一条查询结果
let integralTable = await mongoose.integralTable.find() // 第二条查询结果
userRewards.forEach(currentValue => {
let rewardsintegral = 0
currentValue.rewards.forEach(item => {
integralTable.forEach(target => {
if (target.name == item.reward) {
rewardsintegral += target.integral
}
})
})
ranking.push({
email: currentValue.email,
integral: rewardsintegral
})
})
res.send(integralTable)
通过了三个循环实现,个人实在不满意,觉得应该有更便捷的方法
但个人能力浅薄,未能研究出来
在此还望大拿指点迷津