【问题标题】:Group a collection by a certain criteria按特定条件对集合进行分组
【发布时间】:2018-05-19 16:47:47
【问题描述】:

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

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

在这个集合中,一些元素的 number 字段设置为 1,其他元素设置为 2,其他元素设置为 3,依此类推,以随机顺序排列。我想得到一个数组,它的第一个位置是所有编号为 1 的模型,下一个位置是所有编号为 2 的模型,依此类推。我知道我可以通过循环和简单的 find 或 where 来做到这一点,但我想知道在性能方面是否有更简单、更清洁和更有效的方法。

我尝试过使用 $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 个或三个以上的输入文档(它们很小),并展示一个您希望输出文档看起来像的示例。

标签: ruby-on-rails ruby mongodb


【解决方案1】:

你也可以试试下面的代码

original_list.group_by(&:number).values

【讨论】:

    【解决方案2】:

    在 ruby​​ 中你可以这样做:

    original_list.group_by {|x| x[:number]}.values
    

    不过,不清楚您是否要求 Ruby 解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      相关资源
      最近更新 更多