[英]MongoDB aggregate group and count nested array
我是 MongoDB 的新手,并尝试使用这些数据进行汇总
db.probes.insertMany([
{ '_id' : 1, 'item' : 'abc', 'ts' : new Date('2014-03-01T08:00:00Z'), 'probs' : ['P1', 'P2', 'P3', 'P4', 'P5'] },
{ '_id' : 2, 'item' : 'jkl', 'ts' : new Date('2014-03-01T09:00:00Z'), 'probs' : ['P2', 'P3', 'P4', 'P5'] },
{ '_id' : 3, 'item' : 'xyz', 'ts' : new Date('2014-03-15T09:00:00Z'), 'probs' : ['P3', 'P4', 'P5'] },
{ '_id' : 4, 'item' : 'xyz', 'ts' : new Date('2014-04-04T11:21:39.736Z'), 'probs' : ['P4', 'P5'] },
{ '_id' : 5, 'item' : 'abc', 'ts' : new Date('2014-04-04T21:23:13.331Z'), 'probs' : ['P5'] }
]);
我想对嵌套数组进行分组和计数,怎么可能得到这样的 output?
// output 1
{
'P1' : 1, 'P2' : 2, 'P3' : 3, 'P4' : 4, 'P5' : 5,
}
// output 2
{
{ 'P1' : 1, 'ts' : { 2014-03-01T08:00:00Z } },
{ 'P2' : 2, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z } },
{ 'P3' : 3, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z } }
{ 'P4' : 4, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z, 2014-04-04T11:21:39.736Z } } }
}
// output 3
{
{ 'P1' : { 'count' : 1, 'ts' : { 2014-03-01T08:00:00Z } },
{ 'P2' : { 'count' : 2, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z } },
{ 'P3' : { 'count' : 3, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z } }
{ 'P4' : { 'count' : 4, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z, 2014-04-04T11:21:39.736Z } } }
{ 'P5' : { 'count' : 5, 'ts' : { 2014-03-01T08:00:00Z, 2014-03-01T09:00:00Z, 2014-03-15T09:00:00Z, 2014-04-04T11:21:39.736Z, 2014-04-04T21:23:13.331Z } } }
}
您需要结合$unwind
、 $group
和$addToSet
。 例如:
db.collection.aggregate([
{
$unwind: "$probs"
},
{
$group: {
_id: "$probs",
count: {
$sum: 1
},
ts: {
$addToSet: "$ts"
}
}
}
])
https://mongoplayground.net/p/c4O5zfxhRCl
您可以将其用作您想要的所有格式的基础。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.