我有一个名为event
的集合。
我有一个聚合查询,如下所示
db.event.aggregate([
{ "$group": {
"_id":{
"UserId":"$TracInfo.UserId",
"SessionId":"$TracInfo.SessionId"
},
"EventName":{ "$push": {
"Name":"$Name",
"Time":"$Timestamp"
}}
}},
{ "$out" :"demo" }
])
其输出如下:
{
"result":[
{
"_id" : {
"UserId" : "pawan",
"SessionId" : "q69lIFHcpsCRgxtbJu1v"
},
"EventName" : [
{
"Name" : "PREMISES MAP DELETED",
"Time" : NumberLong("1336090020090")
},
{
"Name" : "SCREEN STOPPED",
"Time" : NumberLong("1336090020010")
},
{
"Name" : "SETTINGS CHANGED",
"Time" : NumberLong("1336090020030")
},
{
"Name" : "PREMISES MAP DELETED",
"Time" : NumberLong("1336090020100")
},
{
"Name" : "SCREEN STARTED",
"Time" : NumberLong("1336090020330")
},
...
},
...
]
}
我想在时间值的结果中对每个文档的EventName数组进行排序。
有什么办法吗?
我试过了
{$sort:{"EventName.Time":1}}
但它不起作用。
答案 0 :(得分:3)
首先确保在Timestamp上有一个索引以避免性能损失。
其次,使用此聚合:
db.event.aggregate([
{ $sort: { Timestamp:1 } },
{ $group:
{ _id:{"UserId":"$TracInfo.UserId","SessionId":"$TracInfo.SessionId"},
EventName:{$push:{"Name":"$Name","Time":"$Timestamp"}}}},
{$out:"demo"}
])
答案 1 :(得分:0)
在将数据推入数组之前对时间戳进行排序。