用于获取阵列对象的Mongodb投影
我有以下格式的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": [{ "
{
"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" }}
])