Mongodb Mongo嵌套数组字段选择

Mongodb Mongo嵌套数组字段选择,mongodb,nested,find,Mongodb,Nested,Find,下面是mongodb文档是这样和这些嵌套的数组字段选择: 对象: { “_id”:{ $oid:“5de775b53ec85e73da2b6d8a” }, “vpg_id”:2, “年份”:2019年, “am_数据”:{ "822": { “am_名称”:“非托管”, “没有什么”:12, “发票总额”:14476.15, “发票总额”:1840, “opp\u won\u onetime\u amt”:0, “一次性配额”:0, “经常性配额”:200, “opp_won_rec_amt”:

下面是
mongodb
文档是这样和这些嵌套的数组字段选择:

对象:

{
“_id”:{
$oid:“5de775b53ec85e73da2b6d8a”
},
“vpg_id”:2,
“年份”:2019年,
“am_数据”:{
"822": {
“am_名称”:“非托管”,
“没有什么”:12,
“发票总额”:14476.15,
“发票总额”:1840,
“opp\u won\u onetime\u amt”:0,
“一次性配额”:0,
“经常性配额”:200,
“opp_won_rec_amt”:0,
“平均总发票”:1206.3458333333,
“平均总发票”:153.33334,
“一次性平均金额”:0,
“平均一次性配额”:0,
“平均运营收入”:0,
“平均经常性配额”:16.668
},
"2155": {
“am_name”:“Daniel Schiralli”,
“没有什么”:12,
“发票总额”:396814.66000000003,
“发票总额”:577693.32000000001,
“opp_won_onetime_amt”:4792.5,
“一次性配额”:14400,
“定期定额”:4800,
“opp_won_rec_amt”:345,
“平均总发票”:33067.888333336,
“平均总发票”:48141.11000000001,
“一次性平均运价”:399.375,
“平均一次性配额”:1200,
“平均opp won收入”:28.75,
“平均循环定额”:400
}
}
}
我只想从所有am_数据数组中选择
no_of_mnth
am_name

钥匙
822
2155
是动态的

它会改变,所以我不能直接在查询中给出它。我怎样才能得到这些数据。不想要


有什么帮助吗?

该键不应更改。根据您的描述,您需要调整模式, 它应该是一个数组,而不是
am_data
对象

{
     "_id": {
         "$oid": "5de775b53ec85e73da2b6d8a"
        },
     "vpg_id": 2,
     "year": 2019,
     "am_data": [
        {
            "id": "822",
             "am_name": "Unmanaged ",
             "no_of_mnths": 12,
             "total_invoice": 14476.15,
             "total_bv_invoice": 1840,
             "opp_won_onetime_amt": 0,
             "one_time_quota": 0,
             "recurring_quota": 200,
             "opp_won_rec_amt": 0,
             "avg_total_invoice": 1206.3458333333333,
             "avg_total_bv_invoice": 153.33333333333334,
             "avg_opp_won_onetime_amt": 0,
             "avg_one_time_quota": 0,
             "avg_opp_won_rec_amt": 0,
             "avg_recurring_quota": 16.666666666666668
        },
        {
            "id": "2155",
             "am_name": "Daniel Schiralli",
             "no_of_mnths": 12,
             "total_invoice": 396814.66000000003,
             "total_bv_invoice": 577693.3200000001,
             "opp_won_onetime_amt": 4792.5,
             "one_time_quota": 14400,
             "recurring_quota": 4800,
             "opp_won_rec_amt": 345,
             "avg_total_invoice": 33067.888333333336,
             "avg_total_bv_invoice": 48141.11000000001,
             "avg_opp_won_onetime_amt": 399.375,
             "avg_one_time_quota": 1200,
             "avg_opp_won_rec_amt": 28.75,
             "avg_recurring_quota": 400
        }
     ]
}

您可以使用
$objectToArray
操作符删除动态键

db.getCollection('Test').aggregate([

    { $project: {"keys": { "$objectToArray": "$$ROOT.am_data" }} },
    { $unwind : "$keys"},
    { $project: {"am_name":"$keys.v.am_name", "no_of_mnths":"$keys.v.no_of_mnths" } }
])
结果:

[{
    "_id" : ObjectId("5de775b53ec85e73da2b6d8a"),
    "am_name" : "Unmanaged ",
    "no_of_mnths" : 12
},
{
    "_id" : ObjectId("5de775b53ec85e73da2b6d8a"),
    "am_name" : "Daniel Schiralli",
    "no_of_mnths" : 12
}]