mongodb - 我需要按字段对嵌套集合进行排序,并按文档字段切片和分组输出结果
问题描述
我有收藏。
{
"cityIsoCode": "LED",
"flights": [{
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-09",
"totalPrice": 829
},{
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-04",
"totalPrice": 467
}, {
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-05",
"totalPrice": 838
}]
}
{
"cityIsoCode": "KZN",
"flights": [{
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-04",
"totalPrice": 518
}, {
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-03",
"totalPrice": 551
}, {
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-10",
"totalPrice": 765
}]
}
我需要按字段“totalPrice”对嵌套集合“航班”进行排序,并输出按文档字段“cityIsoCode”分组的“航班”的 $slice: [1,1]。
我需要得到这个结果:
{
"cityIsoCode" : "LED",
"flights" : [
{
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-09",
"totalPrice": 829
}
]
}
{
"cityIsoCode" : "KZN",
"flights" : [
{
"departureDate": "2019-01-03",
"fromIsoCode": "MOW",
"returnDate": "2019-01-03",
"totalPrice": 551
}
]
}
我可以在 mongo 中执行此操作吗?如何对其进行正确查询?
解决方案
您可以使用聚合管道来执行此操作
db.t45.aggregate([
{$unwind : "$flights"},
{$sort : {"flights.totalPrice":1}},
{$group : {_id : {_id : "$_id", cityIsoCode : "$cityIsoCode"}, flights : {$push : "$flights"}}},
{$project : {_id : "$_id._id", cityIsoCode : "$_id.cityIsoCode", flights : {$slice : ["$flights", 1,1]}}}
]).pretty()
这是mongo 3.4.10版本
我相信在更高的版本中我们可以直接对数组元素进行排序,我们可以避免$unwind
,$sort
并且$group
只$sort
使用数组元素字段和$project
所需的字段
推荐阅读
- javascript - 如何在Javascript中使用给定键将给定文本转换为数组
- java - 从 Android 应用 B 调用 Android 应用 A 中的函数
- android - .idea/encodings.xml 中的编码错误
- c# - 部署到应用服务 .Net Core 3.1、React 后出现 413 错误
- flutter - 如果正在处置子小部件,那么从子小部件显示对话框的最佳选择是什么?
- kubernetes - Selenium 4.0 Kubernetes 部署在节点注册时失败
- flutter - SyncFusion颤动onMarkerRender回调没有被触发
- sql - 不匹配的输入“来自”预期
- r - 如何根据 R 中的另一个数据框创建条件列?
- java - java.lang.IndexOutOfBoundsException:从firebase服务器获取数据时索引:0,大小:0