用不同的标准合并两行,并更改MongoDB中的列名

问题描述 投票:0回答:1

我有一个数据收集如:

{
    "_id": {
        "tenant": "SOFIA",
        "thirdParty": "SOFIA|ANDROS|juridical-entity",
        "medicalreimbursementDateFamlyLabel": "Pharmacie",
        "year": 2018
    },
    "medicalreimbursementDateFamlyLabel": "Pharmacie",
    "year": 2018,
    "numberOfActs": 160,
    "totalRealCharges": 882.3299999999999,
    "totalSSReimbursement": 521.63,
    "totalDelegatePayment": 360.42,
    "totalOtherReimbursement": 0,
    "insuredUsersNumber": 80
},
{
    "_id": {
        "tenant": "SOFIA",
        "thirdParty": "SOFIA|ANDROS|juridical-entity",
        "medicalreimbursementDateFamlyLabel": "Pharmacie",
        "year": 2019
    },
    "medicalreimbursementDateFamlyLabel": "Pharmacie",
    "year": 2019,
    "numberOfActs": 100,
    "totalRealCharges": 784.20,
    "totalSSReimbursement": 122,
    "totalDelegatePayment": 230.35,
    "totalOtherReimbursement": 12,
    "insuredUsersNumber": 56
}
,
{
    "_id": {
        "tenant": "SOFIA",
        "thirdParty": "SOFIA|ANDROS|juridical-entity",
        "medicalreimbursementDateFamlyLabel": "Optique",
        "year": 2019
    },
    "medicalreimbursementDateFamlyLabel": "Optique",
    "year": 2019,
    "numberOfActs": 33,
    "totalRealCharges": 6282,
    "totalSSReimbursement": 158.5,
    "totalDelegatePayment": 4919.46,
    "totalOtherReimbursement": 270,
    "insuredUsersNumber": 21
}
,
{
    "_id": {
        "tenant": "SOFIA",
        "thirdParty": "SOFIA|ANDROS|juridical-entity",
        "medicalreimbursementDateFamlyLabel": "Hospitalisation",
        "year": 2019
    },
    "medicalreimbursementDateFamlyLabel": "Hospitalisation",
    "year": 2019,
    "numberOfActs": 1437,
    "totalRealCharges": 129477.12,
    "totalSSReimbursement": 60697.87,
    "totalDelegatePayment": 63864.41,
    "totalOtherReimbursement": 3523.2999999999997,
    "insuredUsersNumber": 279
}

我需要产生以下结果:

{
    "medicalreimbursementDateFamlyLabel": "Pharmacie",
    "numberOfActs_previousYear": 160,
    "totalRealCharges_previousYear": 882.3299999999999,
    "totalSSReimbursement_previousYear": 521.63,
    "totalDelegatePayment_previousYear": 360.42,
    "totalOtherReimbursement_previousYear": 0,
    "insuredUsersNumber_previousYear": 80, 

    "numberOfActs": 100,
    "totalRealCharges": 784.20,
    "totalSSReimbursement": 122,
    "totalDelegatePayment": 230.35,
    "totalOtherReimbursement": 12,
    "insuredUsersNumber": 56

},
{
    "medicalreimbursementDateFamlyLabel": "Optique",
    "numberOfActs_previousYear": 33,
    "totalRealCharges_previousYear": 6282,
    "totalSSReimbursement_previousYear": 158.5,
    "totalDelegatePayment_previousYear": 4919.46,
    "totalOtherReimbursement_previousYear": 270,
    "insuredUsersNumber_previousYear": 21,

    "numberOfActs": 0,
    "totalRealCharges": 0,
    "totalSSReimbursement": 0,
    "totalDelegatePayment": 0,
    "totalOtherReimbursement": 0,
    "insuredUsersNumber": 0
}
,
{
    "medicalreimbursementDateFamlyLabel": "Hospitalisation",
    "numberOfActs_previousYear": 1437,
    "totalRealCharges_previousYear": 129477.12,
    "totalSSReimbursement_previousYear": 60697.87,
    "totalDelegatePayment_previousYear": 63864.41,
    "totalOtherReimbursement_previousYear": 3523.2999999999997,
    "insuredUsersNumber_previousYear": 279,

    "numberOfActs": 0,
    "totalRealCharges": 0,
    "totalSSReimbursement": 0,
    "totalDelegatePayment": 0,
    "totalOtherReimbursement": 0,
    "insuredUsersNumber": 0
}

即我想通过medicalreimbursementDateFamlyLabel每2行合并,并获得当前年份的所有字段以及上一年的所有字段,并用不同的名称存储它,如果不存在上一年的行,则所有字段都获得0。感谢您的帮助。

node.js mongodb mongodb-query aggregation-framework
1个回答
0
投票

您可以在总和中使用$cond

© www.soinside.com 2019 - 2024. All rights reserved.