Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于获取阵列对象的Mongodb投影_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

用于获取阵列对象的Mongodb投影

用于获取阵列对象的Mongodb投影,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有以下格式的mongodb文档: { "date": "04-10-2018", "botData": [{ "botId": "botId1", "date": "04-10-2018", "weekDay": "Thursday", "hourOfDayData": { "09": 24, "11": 56, "02": 66 }, "channelData": [{ "

我有以下格式的mongodb文档:

{
"date": "04-10-2018",
"botData": [{
    "botId": "botId1",
    "date": "04-10-2018",
    "weekDay": "Thursday",
    "hourOfDayData": {
        "09": 24,
        "11": 56,
        "02": 66
    },
    "channelData": [{
            "channel": "web",
            "totalTraffic": 185,
            "totalMessagesSent": 357,
            "avgMessagesSentPerSession": 1.93,
            "averageInteractionTime": 4.34
        },
        {
            "channel": "fb",
            "totalTraffic": 32,
            "totalMessagesSent": 78,
            "avgMessagesSentPerSession": 1.93,
            "averageInteractionTime": 2.34
        }
    ]
}, {
    "botId": "botId2",
    "date": "04-10-2018",
    "weekDay": "Thursday",
    "hourOfDayData": {
        "09": 24,
        "11": 56,
        "02": 66
    },
    "channelData": [{
            "channel": "web",
            "totalTraffic": 185,
            "totalMessagesSent": 357,
            "avgMessagesSentPerSession": 1.93,
            "averageInteractionTime": 4.34
        },
        {
            "channel": "fb",
            "totalTraffic": 32,
            "totalMessagesSent": 78,
            "avgMessagesSentPerSession": 1.93,
            "averageInteractionTime": 2.34
        }
    ]
}]}  
我想查询文档的一部分。我想要一个查询,它将给我以下结果:

{
    "botId": "botId1",
    "date": "04-10-2018",
    "weekDay": "Thursday",
    "hourOfDayData": {
        "09": 24,
        "11": 56,
        "02": 66
    },
    "channelData": [{
            "channel": "web",
            "totalTraffic": 185,
            "totalMessagesSent": 357,
            "avgMessagesSentPerSession": 1.93,
            "averageInteractionTime": 4.34
        },
        {
            "channel": "fb",
            "totalTraffic": 32,
            "totalMessagesSent": 78,
            "avgMessagesSentPerSession": 1.93,
            "averageInteractionTime": 2.34
        }
    ]
}  
这是我现在使用的查询:

db.test.find({botData:{$elemMatch:{botId:'botId1'}}},{"botData":1,_id:0})  
为此,我得到以下结果:

{
"botData" : [ 
    {
        "botId" : "botId1",
        "date" : "04-10-2018",
        "weekDay" : "Thursday",
        "channelData" : [ 
            {
                "channel" : "web",
                "totalTraffic" : 185.0,
                "totalMessagesSent" : 357.0,
                "avgMessagesSentPerSession" : 1.93,
                "averageInteractionTime" : 4.34
            }, 
            {
                "channel" : "fb",
                "totalTraffic" : 32.0,
                "totalMessagesSent" : 78.0,
                "avgMessagesSentPerSession" : 1.93,
                "averageInteractionTime" : 2.34
            }
        ]
    }, 
    {
        "botId" : "botId2",
        "channelData" : [ 
            {
                "channel" : "web",
                "totalTraffic" : 185.0,
                "totalMessagesSent" : 357.0,
                "avgMessagesSentPerSession" : 1.93,
                "averageInteractionTime" : 4.34
            }, 
            {
                "channel" : "fb",
                "totalTraffic" : 32.0,
                "totalMessagesSent" : 78.0,
                "avgMessagesSentPerSession" : 1.93,
                "averageInteractionTime" : 2.34
            }
        ]
    }
]
}

正如您所看到的,我已经尝试了mongodb投影功能。但这并没有像我希望的那样奏效


任何人都可以找到一个合适的查询来获得我想要的结果吗?

您可以在下面尝试

db.collection.aggregate([
  { "$match": { "botData.botId": "botId1" }},
  { "$addFields": {
    "botData": {
      "$filter": {
        "input": "$botData",
        "cond": { "$eq": ["$$this.botId", "botId1"] }
      }
    }
  }},
  { "$unwind": "$botData" },
  { "$replaceRoot": { "newRoot": "$botData" }}
])

db.collection.aggregate([
  { "$match": { "botData.botId": "botId1" }},
  { "$unwind": "$botData" },
  { "$match": { "botData.botId": "botId1" }},
  { "$replaceRoot": { "newRoot": "$botData" }}
])