{
"169v55": [
{
"code": "2001",
"active": true,
"delist": false
}
],
"SLO1019jkf": [
{
"code": "MOUNTY2026",
"active": false,
"delist": false,
"createdAt": "2019-12-26T15:36:51.819Z"
},
{
"code": "MOUNTY2027",
"active": false,
"delist": false,
"createdAt": "2019-12-26T16:25:32.437Z"
},
{
"code": "MOUNTY2054",
"active": false,
"delist": false,
"createdAt": "2020-02-17T05:47:28.558Z"
}
]
}
以上结果是我替换 newRoot 后得到的。这是我的分组代码,上面给出了结果
{
$group: group
},
{
$project: {
doc: "$doc",
date: date,
type: type
}
},
{
$group: {
_id: null,
locations: {
$push: {
k: "$_id",
v: "$doc"
}
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$locations"
}
}
}
现在我需要再次使用 active 和 delist 进行分组。所以,我想要的输出如下
{
"169v55": {
active: 1,
inactive: 2
},
"SLO1019jkf": {
active: 0,
inactive: 3
}
}
上面的 { active: 1, inactive: 2 }
表示 active
和 inactive
文档各自数组的总数。
最佳答案
我没有看到实际的输入文档。如果顶部的输出来自此管道,则小组赛阶段之前的两个文档看起来像(我不知道 type
用于包含什么):
{
_id: "169v55",
doc:{
"code": "2001",
"active": true,
"delist": false
},
type: unknown
}
和
{
_id: "SLO1019jkf",
doc:{
"code": "MOUNTY2026",
"active": false,
"delist": false,
"createdAt": "2019-12-26T15:36:51.819Z"
},
type: unknown
}
因此,如果您要根据位置进行分组,您可以总结事件和非事件:
{$group:{
_id:"$_id",
active: {$sum:{$cond:[{$eq:["$active",true]},1,0]}},
inactive: {$sum:{$cond:[{$eq:["$active",false]},1,0]}}
}}
这将为您提供单独文档中的每个位置以及计数。如果您需要它们实际上位于单个数组中,请像您一样按 null 分组,但推送计数而不是原始文档字段:
{ k:"$_id", v:{active:"$active",inactive:"$inactive"} }
关于javascript - 如何在mongodb中replaceRoot后进一步分组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60862113/