在mongoDB中按ID分组

时间:2016-09-13 10:29:14

标签: java mongodb aggregation-framework

任何人都可以帮助我在mongodb中进行以下聚合操作:拥有带有id和group id的项目集合,按组ID对它们进行分组。例如,对于项目的收集:

{
    "id": 1,
    "group_id": 10,
    "data": "some_data",
    "name": "first"
},
{
    "id": 2,
    "group_id": 10,
    "data": "some_data",
    "name": "second"
},
{
    "id": 3
    "group_id": 20,
    "data": "some_data",
    "name": "third"
}

使用以下结构创建新的组集合:

    {
    "id": 10,
    "items": [
        {
            "id": 1,
            "group_id": 10,
            "data": "some_data",
            "name": "first"
        },
        {
            "id": 2,
            "group_id": 10,
            "data": "some_data",
            "name": "second"
        }
    ]
},
{
    "id": 10,
    "items": [
        {
            "id": 2,
            "group_id": 20,
            "data": "some_data",
            "name": "third"
        }
    ]
}

使用Java和spring-data-mongodb的相应片段也将受到赞赏。 事实上,我现在正在使用Java做同样的事情,并希望将此逻辑移动到mongo以进行分页优化。

1 个答案:

答案 0 :(得分:2)

您可以使用以下简单的group聚合:

进行此操作
db.table.aggregate(
  [
    {
      $group: {
       _id : "$group_id",
       items : { "$push" : "$$ROOT" }
      }
    }
  ]
);

如果要将聚合中的数据输出到新集合,请使用$out运算符