MongoDB 基于间隔分组

MongoDB grouping based on intervals

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

我想按颜色分组,尺寸是大于还是小于 5。我还想添加例如"medium" 尺码在 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
}

这很容易使用 $cond:

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

所以只是有条件地select分组键中的值基于文档中的当前值并计数。