按特定标准对集合进行分组

时间:2017-12-05 22:15:03

标签: ruby-on-rails ruby mongodb

所以我在mongoDB中有一个集合,其结构如下:

{
    "_id": 129flaslkfja,
    "number": 10
}

在这个集合中,一些元素的数字字段按随机顺序设置为1个其他为2,其他元素为3等。我想得到一个数组,它在第一个位置所有模型的数字1在下一个位置所有模型的数字为2,依此类推。我知道我可以通过循环和简单的查找来实现这一点,但我想知道在性能方面是否有更简单,更清晰和更有效的方法。

我尝试过$ group,$ match但这不是我想要的。

例如,这是我数据库中的数据:

[{
  "_id": a1,
  "number": 1
},
{
  "_id": a2,
  "number": 3
},
{
  "_id": a3,
  "number": 2
},
{
  "_id": a4,
  "number": 2
},
{
  "_id": a5,
  "number": 2
},
{
  "_id": a6,
  "number": 1
}]

所以我想按照数字值分组:

[
    [{
      "_id": a1,
      "number": 1
    },
    {
      "_id": a6,
      "number": 1
    }],

    [{
      "_id": a3,
      "number": 2
    },
    {
      "_id": a4,
      "number": 2
    },
    {
      "_id": a5,
      "number": 2
    }],

    [{
      "_id": a2,
      "number": 3
    }]
]

2 个答案:

答案 0 :(得分:2)

您也可以尝试以下代码

original_list.group_by(&:number).values

答案 1 :(得分:1)

在红宝石中你可以这样做:

<table ng-repeat="list in holidayList" style="width:100%">
    <tbody>
        <tr>
            <td>{{list[0].month}}</td>
        </td>
        <tr ng-repeat="leave in list">
            <td width="14%">{{leave.date}}</td>
            <td width="20%">{{leave.monthCode}}</td>
            <td>{{leave.holiday_name}}</td>
        </tr>
    </tbody>
</table>

目前尚不清楚您是否要求使用Ruby解决方案。