在mongo中嵌套查找或聚合

时间:2018-08-17 16:43:26

标签: mongodb nosql

下面是我的json文件中的文档结构。我想显示每个获胜者的名字和姓氏,按获胜年份分组。

2 个答案:

答案 0 :(得分:0)

应该执行以下操作:

db.winners.aggregate([{
    $unwind: "$prizes"
  },
  {
    $group: {
      _id: {
        name: {
          $concat: [
            "$firstname",
            " ",
            "$surname"
          ]
        }
      },
      years: {
        $push: "$prizes.year"
      }
    }
  },
  {
    $addFields: {
      name: "$_id.name"
    }
  },
  {
    $project: {
      _id: 0
    }
  }
])

您可以see the result here

我们基本上首先需要将prizes展平,然后按连接的firstnamesurname进行分组,然后按years

Rest只是为了让我们能显示名称而不是_id等。

答案 1 :(得分:0)

如果要获得同一年的所有获奖者,可以执行以下操作:

db.winners.find({year:1},(err, winners)=>{
let winnersList = [];
winners.forEach(winner =>{
     winnersList.push(winner.firstname, winner.surname);
//Or watever you wish to do with it.
     }
}

简便的方法是从您想要的年份中获取所有对象,然后使用所需的东西,仅是我个人的看法。希望对您有所帮助。