我正在嘗試通過 react chartjs 顯示 mongodb 聚合結果。我的部分問題是我沒有在后端實作正確的聚合輸出。
當前聚合輸出,其中包含不需要的空花括號
[{
"_id":"Fubar",
"A_set":[{"A":"Y"},{"A":"N"},{},{}],
"A_count_set":[{"A_count":1},{"A_count":1},{},{}],
"B_set":[{},{},{"B":"N"},{"B":"Y"}],
"B_count_set":[{},{},{"B_count":1},{"B_count":1}]},
{
"_id":"Fubar2",
"A_set":[{"A":"Y"},{"A":"N"},{},{}],
"A_count_set":[{"A_count":1},{"A_count":1},{},{}],
"B_set":[{},{},{"B":"N"},{"B":"Y"}],
"B_count_set":[{},{},{"B_count":1},{"B_count":1}]
}]
我正在嘗試實作缺少空花括號的目標聚合輸出
[{
"_id":"Fubar",
"A_set":[{"A":"Y"},{"A":"N"}],
"A_count_set":[{"A_count":1},{"A_count":1}],
"B_set":[{"B":"N"},{"B":"Y"}],
"B_count_set":[{"B_count":1},{"B_count":1}]},
{
"_id":"Fubar2",
"A_set":[{"A":"Y"},{"A":"N"}],
"A_count_set":[{"A_count":1},{"A_count":1}],
"B_set":[{"B":"N"},{"B":"Y"}],
"B_count_set":[{"B_count":1},{"B_count":1}]
}]
管道操作
{$facet: {
A_branch: [
{$group: {
_id: {
Q_id: "$A_id",
A_id: "$A_id"
},
A_count: {$sum: 1}
}}
],
B_branch: [
{$group: {
_id: {
Q_id: "$Q_id",
B_id: "$B_id"
},
B_count: {$sum: 1}
}}
]
}},
{$project: {
combined_group: {$setUnion: ['$A_branch','$B_branch']}
}},
{$unwind: '$combined_group'},
{$lookup:
{
from: "Q",
localField: "combined_group._id.Q_id",
foreignField: "_id",
as: "QRef"
}
},
{$unwind: "$QRef" },
{$lookup:
{
from: "A",
localField: "combined_group._id.A_id",
foreignField: "_id",
as: "ARef"
}
},
{$unwind: {path:"$ARef", preserveNullAndEmptyArrays: true} },
{$lookup:
{
from: "B",
localField: "combined_group._id.B_id",
foreignField: "_id",
as: "BRef"
}
},
{$unwind: {path:"$BRef", preserveNullAndEmptyArrays: true} },
{$group: {
_id: "$QRef.text",
A_set: {
$push: {
A: "$ARef.value"
}
},
A_count_set: {
$push: {
A_count: "$combined_group.A_count"
}
},
B_set: {
$push: {
B: "$BRef.value"
}
},
B_count_set: {
$push: {
B_count: "$combined_group.B_count"
}
}
}}
聚合輸入
{
"_id" : ObjectId("618..."),
"Q_id" : ObjectId("618..."),
"B_id" : ObjectId("618..."),
"A_id" : ObjectId("618...")
}
{
"_id" : ObjectId("618..."),
"Q_id" : ObjectId("618..."),
"B_id" : ObjectId("618..."),
"A_id" : ObjectId("618...")
}
{
"_id" : ObjectId("618..."),
"Q_id" : ObjectId("618..."),
"B_id" : ObjectId("618..."),
"A_id" : ObjectId("618...")
}
{
"_id" : ObjectId("618..."),
"Q_id" : ObjectId("618..."),
"B_id" : ObjectId("618..."),
"A_id" : ObjectId("618...")
}
uj5u.com熱心網友回復:
$filter在管道末端使用
db.collection.aggregate([
{
"$set": {
"A_set": {
"$filter": {
"input": "$A_set",
"as": "x",
"cond": { "$ne": [ "$$x", {}] }
}
}
}
},
{
"$set": {
"A_count_set": {
"$filter": {
"input": "$A_count_set",
"as": "x",
"cond": { "$ne": [ "$$x", {}] }
}
}
}
},
{
"$set": {
"B_set": {
"$filter": {
"input": "$B_set",
"as": "x",
"cond": { "$ne": [ "$$x", {}] }
}
}
}
},
{
"$set": {
"B_count_set": {
"$filter": {
"input": "$B_count_set",
"as": "x",
"cond": { "$ne": [ "$$x", {}] }
}
}
}
}
])
mongoplayground
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350939.html
