我有这样的架构:
{
"_id" : "555",
"connections" : [
{
"id" : 111
"time" : 1456439249
},
{
"id" : 222
"time" : 1556412345
}
...
}
"users" : [
"111" : {
"id" : 111
"name" : "Michael"
},
"222" : {
"id" : 222
"name" : "Jim"
}
...
}
我希望按时间排序连接和用户数据。
我正在尝试这个:
db.getCollection('mycollecion')
.find(
{'_id' : '555'},
{'_id' : 0, 'connections' : 1, 'users' : 1}
).sort({'connections.time' : 1})
可能" connections.time"不是正确的路径,因为它的数组。
如何按子字段排序连接"时间"?
并且可以在同一个查询过滤器"用户"通过出现在连接ID上?
答案 0 :(得分:1)
请尝试通过.aggregation()
> db.mycollecion.aggregate([
{$unwind: '$connections'},
{$sort: {'connections.time': 1}},
{$group: {
_id: '$_id',
connections: {$push: '$connections'}
}
}]);