从MongoDB中的另一个集合中增加价值

约翰福斯伦德

我从外部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
    },
    ...
}
威格

可以通过forEach和if语句轻松地做到这一点。注释中说明了所有内容。另外,请随时询问您是否对代码有任何疑问。

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

测试上面代码的代码段。

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从另一个类中增加价值(java)

MongoDB Aggregation基于相同集合中的文档增加价值

如何通过单击Angular为另一个对象的对象增加价值

扑扑增加价值到另一个班级名单

在Horizon集合中增加价值

Mongodb将一个集合复制到另一个集合中

在另一个集合中查找具有价值的键

如何使用mongodb中主集合的objectID在另一个集合中查找

根据另一个集合中的ID对mongodb集合项进行排名

将MongoDB(3.0)集合的子集保存到Python中的另一个集合

将集合数组放入mongodb的另一个集合中

使用mongoose nodejs在另一个集合mongoDB中填充集合

如何使用另一个集合中的信息过滤MongoDB集合?

如何将集合复制到 mongoDB 中的另一个新集合

如何在一个集合中查找未被另一个集合中的文档引用的MongoDB文档?

mongoDB 从一个集合中查找并保存在另一个集合中

MongoDB 使用另一个集合中的另一个字段更新字段

在回溯中增加价值

在MongoDB中仅添加另一个集合中的字段

MongoDB无法在NodeJS中的另一个文件中获取集合

如何从另一个选择中插入价值

另一个价值条件中的“案例”

如何从另一组中增加价值以进行设置?

如何有条件地从另一个集合中删除MongoDB?

在 mongodb 中的另一个集合的 foreignField 上使用 $group 进行分组

MongoDB Shell:连接另一个集合中的单个字段

如何获取另一个集合中引用的MongoDB文档的列表

如何在 mongoDB 中查询每个文档的另一个集合

如何使用同一数据库中另一个集合的数据创建 mongoDB 集合