MongoDB - 管道按唯一集分组?
MongoDB - pipeline grouping by unique set?
我有一个看起来像这样的数据集:
{
"model":"1234",
"trackingNumber":"9123..."
}
这些模型值由很多记录共享,我正在尝试找出哪些组合代表最常见的分组。
我有一个管道可以满足我的需求,但顺序很重要。例如:
{
"_id":["1234","4321"]
"count":69761
},
{
"_id":["4321","1234"]
"count":44321
},
...
有没有什么方法可以使用 _id 按唯一数组分组,而不考虑顺序?
到目前为止,我想到的唯一解决方案是按模型排序并希望保留 $addToSet
操作顺序,但这两者都感觉很笨拙并且感觉性能低下而且我不怀疑操作顺序无论如何都得到保证。
我的管道:
db.trackingIds.aggregate([
{
$match: { $and: [
...
] }
},
{
$group: {
_id : "$trackingNumber",
models: {$addToSet: "$model"},
count : { $sum: 1 }
}
},
{
$group: {
_id : "$models",
count : { $sum: 1 }
}
},
{
$sort: {
count: -1
}
}
])
您可以 $unwind
数组,按展开值排序,然后 $group
按 _id
和 $push
将元素返回数组。
数组就是这样排序的,所以各种等价集应该测试相等。
我有一个看起来像这样的数据集:
{
"model":"1234",
"trackingNumber":"9123..."
}
这些模型值由很多记录共享,我正在尝试找出哪些组合代表最常见的分组。
我有一个管道可以满足我的需求,但顺序很重要。例如:
{
"_id":["1234","4321"]
"count":69761
},
{
"_id":["4321","1234"]
"count":44321
},
...
有没有什么方法可以使用 _id 按唯一数组分组,而不考虑顺序?
到目前为止,我想到的唯一解决方案是按模型排序并希望保留 $addToSet
操作顺序,但这两者都感觉很笨拙并且感觉性能低下而且我不怀疑操作顺序无论如何都得到保证。
我的管道:
db.trackingIds.aggregate([
{
$match: { $and: [
...
] }
},
{
$group: {
_id : "$trackingNumber",
models: {$addToSet: "$model"},
count : { $sum: 1 }
}
},
{
$group: {
_id : "$models",
count : { $sum: 1 }
}
},
{
$sort: {
count: -1
}
}
])
您可以 $unwind
数组,按展开值排序,然后 $group
按 _id
和 $push
将元素返回数组。
数组就是这样排序的,所以各种等价集应该测试相等。