mongodb - mongodb聚合-嵌套组
问题描述
我正在尝试执行嵌套组,我有一个包含两个键(invoiceIndex、procedureIndex)的文档数组我需要像这样排列文档
invoices (parent) -> procedures (children)
invoices: [ // Array of invoices
{
.....
"procedures": [{}, ...] // Array of procedures
}
]
这是一个示例文档
{
"charges": 226.09000000000003,
"currentBalance": 226.09000000000003,
"insPortion": "",
"currentInsPortion": "",
"claim": "notSent",
"status": "unpaid",
"procedures": {
"providerId": "9vfpjSraHzQFNTtN7",
"procedure": "21111",
"description": "One surface",
"category": "basicRestoration",
"surface": [
"m"
],
"providerName": "B Dentist",
"proceduresIndex": "0"
},
"patientId": "mE5vKveFArqFHhKmE",
"patientName": "Silvia Waterman",
"invoiceIndex": "0",
"proceduresIndex": "0"
}
这是我尝试过的
解决方案
您可以尝试以下方法吗?
db.collection.aggregate([
{
$group: {
_id: "$invoiceIndex",
procedures: {
$push: "$procedures"
},
invoice: {
$first: "$$ROOT"
}
}
},
{
$addFields: {
"invoice.procedures": "$procedures"
}
},
{
"$replaceRoot": {
"newRoot": "$invoice"
}
}
])
我将invoice
字段保留为invoice: { $first: "$$ROOT" }
,还将procedures
的$push
逻辑保留为单独的字段。然后,$addFields
我将该程序数组移动到新 invoice
对象中。然后将root替换为那个。
您不应该将用作inprocedureIndex
的一部分,因为那时您将无法获得一组, 。如您所见,按照我的逻辑,它工作得很好。_id
$group
procedures
invoiceIndex
$group
推荐阅读
- python - Matplotlib 动画未显示使用 gridspec 绘制的图像
- javascript - 当一个对象中有多种数据类型时,如何在javascript中以我需要的格式获取数据?
- ansible - 在我们第一次执行脚本时运行任务,但之后不再执行
- scheme - 如何取消引用方案符号?
- ios - 不符合协议 Decodabel 和 Encodable
- flask - Flask:如何将值传递给 base.html?
- reactjs - Redux 如何在嵌套属性上使用 createEntityAdapter?
- flutter - AnimatedAlign 不适用于 Row Flultter
- r - lapply 对许多数据框的列求和
- reactjs - 如何使用 jest 作为经过身份验证的用户测试快照?