mongo聚合-组-显示孩子的数量



这就是我的文档的样子:

[
{
"_id": {
"$oid": "633a982186c443b693dc240c"
},
"date": "2022-09-27",
"file": "file_1",
"package": 1,
"packagecode": "xy/1",
"pshIdList": [],
"userList": [
{
"userName": "user_1",
"crDate": "2022.09.28",
"boolId": 1
}
]
},
{
"_id": {
"$oid": "633a982186c443b693dc240d"
},
"date": "2022-09-27",
"file": "file_2",
"package": 2,
"packagecode": "xy/2",
"pshIdList": [],
"userList": []
}
]

由于前端的出现(我必须显示一个树结构(,我需要按以下方式对文档进行分组:

db.collection.aggregate([
{
$set: {
"username": {
$filter: {
input: "$userList",
as: "user",
cond: {
"$eq": [
"$$user.boolId",
1
]
}
}
}
}
},
{
$set: {
"username": {
$arrayElemAt: [
"$username",
0
]
}
}
},
{
$set: {
"username": {
$ifNull: [
"$username.userName",
"na"
]
}
}
},
{
$group: {
_id: {
"date": {
$concat: [
"date: ",
"$date",

]
},
"file": {
$concat: [
"file: ",
"$file"
]
},

},
"items": {
$push: {
"items": {
$concat: [
"$packagecode",
" - ",
"$username"
]
}
}
}
}
},
{
$group: {
_id: "$_id.date",
"items": {
$push: {
"file": "$_id.file",
"items": "$items"
}
}
}
}
])

这是聚合的结果:

[
{
"_id": "date: 2022-09-27",
"items": [
{
"file": "file: file_1",
"items": [
{
"items": "xy/1 - user_1"
}
]
},
{
"file": "file: file_2",
"items": [
{
"items": "xy/2 - na"
}
]
}
]
}
]

还需要显示每个级别的子级数量,因此输出应该如下所示:

[
{
"_id": "date: 2022-09-27 - 2",
"items": [
{
"file": "file: file_1 - 1",
"items": [
{
"items": "xy/1 - user_1"
}
]
},
{
"file": "file: file_2 - 1",
"items": [
{
"items": "xy/2 - na"
}
]
}
]
}
]

我不知道如何解决它。我尝试使用$set运算符,但不能在其中使用group。这是一个示例操场

您可以使用$map在items数组上循环,并在file中追加子项的数量,如下所示:

db.collection.aggregate([
{
$set: {
"username": {
$filter: {
input: "$userList",
as: "user",
cond: {
"$eq": [
"$$user.boolId",
1
]
}
}
}
}
},
{
$set: {
"username": {
$arrayElemAt: [
"$username",
0
]
}
}
},
{
$set: {
"username": {
$ifNull: [
"$username.userName",
"na"
]
}
}
},
{
$group: {
_id: {
"date": {
$concat: [
"date: ",
"$date",

]
},
"file": {
$concat: [
"file: ",
"$file"
]
},

},
"items": {
$push: {
"items": {
$concat: [
"$packagecode",
" - ",
"$username"
]
}
}
}
}
},
{
$group: {
_id: "$_id.date",
"items": {
$push: {
"file": "$_id.file",
"items": "$items"
}
}
}
},
{
"$set": {
"items": {
"$map": {
"input": "$items",
"as": "element",
"in": {
items: "$$element.items",
file: {
"$concat": [
"$$element.file",
" - ",
{
"$toString": {
"$size": "$$element.items"
}
}
]
}
}
}
},
_id: {
"$concat": [
"$_id",
" - ",
{
"$toString": {
"$sum": {
"$map": {
"input": "$items",
"as": "element",
"in": {
"$size": "$$element.items"
}
}
}
}
}
]
}
}
}
])

游乐场链接。

相关内容

最新更新