我有数据集,我需要该数据集中的两个不同的分组依据值。请找到下面的数据集,
[{
"ASSIGN_ID": "583f84bce58725f76b322398",
"SPEC_ID": "58411772",
"STATUS": 1,
"UPDATE_DATE": ISODate("2016-12-21T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322398",
"SPEC_ID": "58411772",
"STATUS": 4,
"UPDATE_DATE": ISODate("2016-12-22T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322398",
"SPEC_ID": "58411772",
"STATUS": 4,
"UPDATE_DATE": ISODate("2016-12-23T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322398",
"SPEC_ID": "58411774",
"STATUS": 3,
"UPDATE_DATE": ISODate("2016-12-24T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322311",
"SPEC_ID": "58411775",
"STATUS": 1,
"UPDATE_DATE": ISODate("2016-12-25T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322311",
"SPEC_ID": "58411775",
"STATUS": 3,
"UPDATE_DATE": ISODate("2016-12-23T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322322",
"SPEC_ID": "58411774",
"STATUS": 1,
"UPDATE_DATE": ISODate("2016-12-20T04:10:23.000Z")
},
{
"ASSIGN_ID": "583f84bce58725f76b322322",
"SPEC_ID": "58411778",
"STATUS": 4,
"UPDATE_DATE": ISODate("2016-12-21T04:10:23.000Z")
}
]
我想使用 ASSIGN_ID 和 STATUS 对其进行分组,并在我需要 SPEC_ID 的每个 ASSIGN_ID 组中进行分组以及状态。请在下面找到预期的输出,
[{
"ASSIGN_ID": "583f84bce58725f76b322398",
"ASSIGN_GROUP": [{
"STATUS": 1,
"COUNT": 1
},
{
"STATUS": 3,
"COUNT": 1
},
{
"STATUS": 4,
"COUNT": 2
}
],
"SPEC_ARRAY": [{
"SPEC_ID": "58411772",
"SPEC_GROUP": [{
"STATUS": 1,
"COUNT": 1
},
{
"STATUS": 4,
"COUNT": 2
}
]
},
{
"SPEC_ID": "58411774",
"SPEC_GROUP": [{
"STATUS": 3,
"COUNT": 1
}]
}
]
},
{
"ASSIGN_ID": "583f84bce58725f76b322311",
"ASSIGN_GROUP": [{
"STATUS": 1,
"COUNT": 1
},
{
"STATUS": 3,
"COUNT": 1
}
],
"SPEC_ARRAY": [{
"SPEC_ID": "58411775",
"SPEC_GROUP": [{
"STATUS": 1,
"COUNT": 1
},
{
"STATUS": 3,
"COUNT": 1
}
]
}]
},
{
"ASSIGN_ID": "583f84bce58725f76b322322",
"ASSIGN_GROUP": [{
"STATUS": 1,
"COUNT": 1
},
{
"STATUS": 4,
"COUNT": 1
}
],
"SPEC_ARRAY": [{
"SPEC_ID": "58411774",
"SPEC_GROUP": [{
"STATUS": 1,
"COUNT": 1
}]
},
{
"SPEC_ID": "58411778",
"SPEC_GROUP": [{
"STATUS": 4,
"COUNT": 1
}]
}
]
}
]
目前,我到目前为止所做的只是对 ASSIGN_ID 进行分组,并按STATUS 请找到下面的代码,
Modal.aggregate([
{
"$group": {
"_id": {
"INSPECTED_BY": "$INSPECTED_BY",
"STATUS": "$STATUS"
},
"spec_id": "$SPEC_ID",
"total": {
"$sum": 1
}
}
}, {
"$group": {
"_id": "$_id.INSPECTED_BY",
"data": {
"$push": {
"STATUS": "$_id.STATUS",
"total": "$total"
}
}
}
}
]);
结果是
[
{
"_id": "583f84bce58725f76b322398",
"data": [
{
"STATUS": 1,
"COUNT": 1
}, {
"STATUS": 3,
"COUNT": 1
}, {
"STATUS": 4,
"COUNT": 2
}
]
}, {
"_id": "583f84bce58725f76b322311",
"data": [
{
"STATUS": 1,
"COUNT": 1
}, {
"STATUS": 3,
"COUNT": 1
}
]
}, {
"_id": "583f84bce58725f76b322322",
"data": [
{
"STATUS": 1,
"COUNT": 1
}, {
"STATUS": 4,
"COUNT": 1
}
]
}
]
请为我提供一个合适的解决方案以获得预期的结果。
最佳答案
您可以尝试下面针对版本 3.2 的替代聚合。
Modal.aggregate([{
$group: {
_id: {
ASSIGN_ID: "$ASSIGN_ID",
SPEC_ID: "$SPEC_ID",
STATUS: "$STATUS"
},
COUNT: {
$sum: 1
}
}
}, {
$group: {
_id: {
ASSIGN_ID: "$_id.ASSIGN_ID",
SPEC_ID: "$_id.SPEC_ID"
},
SPEC_GROUP: {
$push: {
STATUS: "$_id.STATUS",
COUNT: "$COUNT"
}
}
}
}, {
$group: {
_id: "$_id.ASSIGN_ID",
SPEC_ARRAY: {
$push: {
SPEC_ID: "$_id.SPEC_ID",
SPEC_GROUP: "$SPEC_GROUP"
}
}
}
}, {
$project: {
ASSIGN_ID: "$_id",
ASSIGN_GROUP: "$SPEC_ARRAY.SPEC_GROUP",
SPEC_ARRAY: 1
}
}, {
$unwind: "$ASSIGN_GROUP"
}, {
$unwind: "$ASSIGN_GROUP"
}, {
$group: {
_id: "$ASSIGN_ID",
ASSIGN_GROUP: {
$push: "$ASSIGN_GROUP"
},
SPEC_ARRAY: {
$first: "$SPEC_ARRAY"
}
}
}])
对于 3.4 版本,将最后四个阶段替换为 $reduce
{
$project: {
_id: 0,
ASSIGN_ID: "$_id",
SPEC_ARRAY: 1,
ASSIGN_GROUP: {
$reduce: {
input: "$SPEC_ARRAY.SPEC_GROUP",
initialValue: [],
in: {
$concatArrays: ["$$value", "$$this"]
}
}
}
}
}
关于javascript - MongoDB 聚合两个不同的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42548447/