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分组键中的值基于文档中的当前值并计数。
我想根据测量中的数字间隔对我的数据进行分组。我可以使用聚合框架或某些 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分组键中的值基于文档中的当前值并计数。