从 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

将数组中对象的字段添加到同一数组中对象的另一个字段MongoDB

如何匹配 MongoDB 中的子文档数组?

将新字段添加到集合的所有文档中,将文档字段中的值添加到 MongoDB (Mongoose) 中,记录为 300K+

如何匹配MongoDB中的子文档数组?

将数据从MongoDB导入SQL Server