我想根据测量中的数字间隔对数据进行分组。我可以使用聚合框架或某些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
}
答案 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" }
}}
])
因此,只需根据文档中的当前值和计数有条件地选择分组键中的值。