试试这个查询:
db.colors.aggregate([
{
$group: {
_id: {
month: { $month: "$Date" },
color: "$Rag"
},
count: { $sum: 1 }
}
},
{
$group: {
_id: "$_id.month",
array: {
$push: {
k: "$_id.color",
v: "$count"
}
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: {
$concatArrays: [[{ k: "_id", v: "$_id" }], "$array"]
}
}
}
}
]);
问题中附加的测试数据的输出:
{
"_id" : 3,
"Red" : 1,
"Amber" : 14,
"Green" : 7
}
colors 集合中的数据:
[
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Green"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Red"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
},
{
"_id": ObjectId("..."),
"Date": ISODate("2021-03-16T00:00:00.000+05:30"),
"Rag": "Amber"
}
]