从 MongoDB 中的另一个集合中添加值
Posted
技术标签:
【中文标题】从 MongoDB 中的另一个集合中添加值【英文标题】:Add value from another collection in MongoDB 【发布时间】:2019-11-05 15:00:39 【问题描述】:我从给我两个集合的外部 API 获取数据。一种用于足球比赛,一种用于足球比赛。我将这些数据保存在 MongoDB 中。当我查询一场足球比赛时,我想知道参加比赛的每支球队。
这些是模型。
游戏
...,
homeTeam:
id: 1234
,
awayTeam:
id: 2345
,
...
比赛
...
standings: [
position: 1,
team:
id: 1234,
...
,
...
,
position: 2,
team:
id: 2345,
...
,
...
]
我已经尝试使用 $lookup 聚合,但我无法让它按照我想要的方式工作。
const game = await Game.aggregate([
$match: 'competition.id': parseInt(req.params.id) ,
$lookup:
from: 'competitions',
localField: 'homeTeam.id',
foreignField: 'standings.team.id',
as: 'homeTeam.position',
]);
我希望每场比赛的结果都是这样。
...,
homeTeam:
id: 1234,
position: 1
,
awayTeam:
id: 2345
position: 2
,
...
【问题讨论】:
【参考方案1】:这可以在 forEach 和 if 语句的帮助下轻松完成。一切都在 cmets 中进行了解释。另外,如果您对代码有任何疑问,请随时询问。
let objectsArr = Object.keys(firstOBJ); // get properties
let answer = []; // a new array for your answer
let childs = Object.keys(secondOBJ); // get the properties of secondOBJ
secondOBJ[childs].forEach((val, i) => // for every property in secondOBJ
if (firstOBJ[objectsArr[i]].id == val.team.id) // we match the id's if they are same then we proceed
name = objectsArr[i]; // we get the name
answer.push( // and we pust with the name
[name]:
id: val.team.id, // along with the corresponding properties
position: val.position
)
);
为上面的代码测试 sn-p。
let firstOBJ =
homeTeam:
id: 1234
,
awayTeam:
id: 2345
let secondOBJ =
standings: [
position: 1,
team:
id: 1234,
,
,
position: 2,
team:
id: 2345
,
]
let objectsArr = Object.keys(firstOBJ);
let answer = [];
secondOBJ[Object.keys(secondOBJ)].forEach((val, i) =>
if (firstOBJ[objectsArr[i]].id == val.team.id)
answer.push(
[objectsArr[i]]:
id: val.team.id,
position: val.position
);
);
console.log(answer)
【讨论】:
以上是关于从 MongoDB 中的另一个集合中添加值的主要内容,如果未能解决你的问题,请参考以下文章
将数组中对象的字段添加到同一数组中对象的另一个字段MongoDB