我是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'] }
]);
我想对嵌套数组进行分组和计数,如何获得这样的输出?
//输出1
{
'P1' : 1, 'P2' : 2, 'P3' : 3, 'P4' : 4, 'P5' : 5,
}
//输出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 } } }
}
//输出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 } } }
}
答案 0 :(得分:0)
您需要组合$unwind
,$group
和$addToSet
。例如:
db.collection.aggregate([
{
$unwind: "$probs"
},
{
$group: {
_id: "$probs",
count: {
$sum: 1
},
ts: {
$addToSet: "$ts"
}
}
}
])
https://mongoplayground.net/p/c4O5zfxhRCl
您可以将其用作所有所需格式的基础。