基于间隔的MongoDB分组

时间:2015-03-17 17:17:21

标签: mongodb aggregation-framework

我想根据测量中的数字间隔对数据进行分组。我可以使用聚合框架或某些map-reduce函数吗?

我想按颜色分组,尺寸是大于还是小于5.我还想添加例如"介质"适用于3到5之间的尺寸。

我可以按大小和颜色进行分组,但是每个不同的大小都有自己的对象。

我知道这可以通过db.collection.find()检查每个不同对象的大小,然后根据我的规范添加它们来完成,但这将非常慢。

示例:

Objects:
{
  color: "red",
  size:  2
}
{
  color: "red",
  size:  4
}
{
  color: "blue",
  size:  2
}
{
  color: "blue",
  size:  1
}
{
  color: "blue",
  size:  7
}

输出:

{
  _id: {
    color: "red",
    size: "small"
  }
  total size: 6
}
{
  _id: {
    color: "red",
    size: "large"
  }
  total size: 0
}
{
  _id: {
    color: "blue",
    size: small
  }
  total size: 3
}
{
  _id: {
    color: "blue",
    size: "large"
  }
  total size: 7
}

1 个答案:

答案 0 :(得分:2)

使用$cond

很容易
db.collection.aggregate([
    { "$group": {
        "_id": {
            "color": "$color",
            "size": {
                "$cond": [
                    { "$lt": [ "$size", 3 ] },
                    "small",
                    { "$cond": [
                        { "$lt": [ "$size", 6 ] },
                        "medium",
                        "large"
                    ]}
                ]
            }
        },
        "total_size": { "$sum": "$size" }
    }}
])

因此,只需根据文档中的当前值和计数有条件地选择分组键中的值。