【发布时间】:2018-06-29 06:30:45
【问题描述】:
我有这个收藏
{“ip”:“192.168.141.1”,“ifsIndex”:“28”,“link”:“1”,“timeStamp”:“19-01-2018 18:12:42”} {“ip”:“192.168.141.1”,“ifsIndex”:“30”,“链接”:“1”,“timeStamp”:“19-01-2018 18:12:42”} {“ip”:“192.168.141.1”,“ifsIndex”:“32”,“链接”:“1”,“timeStamp”:“19-01-2018 18:12:42”} {“ip”:“192.168.141.1”,“ifsIndex”:“29”,“链接”:“1”,“timeStamp”:“19-01-2018 18:12:42”} {“ip”:“192.168.141.1”,“ifsIndex”:“31”,“链接”:“1”,“timeStamp”:“19-01-2018 18:12:42”} {“ip”:“192.168.141.1”,“ifsIndex”:“28”,“链接”:“1”,“timeStamp”:“19-01-2018 18:14:16”} {“ip”:“192.168.141.1”,“ifsIndex”:“29”,“链接”:“1”,“timeStamp”:“19-01-2018 18:16:33”} {“ip”:“192.168.141.1”,“ifsIndex”:“32”,“链接”:“1”,“timeStamp”:“19-01-2018 18:14:09”} {“ip”:“192.168.141.1”,“ifsIndex”:“28”,“链接”:“1”,“timeStamp”:“19-01-2018 18:16:33”} {“ip”:“192.168.141.1”,“ifsIndex”:“30”,“链接”:“1”,“timeStamp”:“19-01-2018 18:14:16”} {“ip”:“192.168.141.1”,“ifsIndex”:“31”,“链接”:“1”,“timeStamp”:“19-01-2018 18:16:33”} {“ip”:“192.168.141.1”,“ifsIndex”:“29”,“链接”:“1”,“timeStamp”:“19-01-2018 18:14:16”} {“ip”:“192.168.141.1”,“ifsIndex”:“30”,“链接”:“1”,“timeStamp”:“19-01-2018 18:16:33”} {“ip”:“192.168.141.1”,“ifsIndex”:“31”,“链接”:“1”,“timeStamp”:“19-01-2018 18:14:16”} {“ip”:“192.168.141.1”,“ifsIndex”:“32”,“链接”:“1”,“timeStamp”:“19-01-2018 18:16:33”}
我想将 ip 地址和 ifsIndex 组合在一起,并显示链接和时间戳的数组,并以排序的时间戳显示结果。我试过这个
db.events.aggregate([{$group:{_id:{"ifIndex":"$ifsIndex","ip":"$ip"},status:{$push:"$link"},timeStamp:{$push:"$timeStamp"}}},{$sort:{"timeStamp":1}}])
我得到的结果不是我想要的。有些值没有按时间戳排序
{ "_id" : { "ifIndex" : "31", "ip" : "192.168.141.1" }, "status" : [ "1", "1", "1" ], "timeStamp" : [ "19-01-2018 18:12:42", "19-01-2018 18:16:33", "19-01-2018 18:14:16" ] }
{ "_id" : { "ifIndex" : "29", "ip" : "192.168.141.1" }, "status" : [ "1", "1", "1" ], "timeStamp" : [ "19-01-2018 18:12:42", "19-01-2018 18:16:33", "19-01-2018 18:14:16" ] }
{ "_id" : { "ifIndex" : "32", "ip" : "192.168.141.1" }, "status" : [ "1", "1", "1" ], "timeStamp" : [ "19-01-2018 18:12:42", "19-01-2018 18:14:09", "19-01-2018 18:16:33" ] }
{ "_id" : { "ifIndex" : "30", "ip" : "192.168.141.1" }, "status" : [ "1", "1", "1" ], "timeStamp" : [ "19-01-2018 18:12:42", "19-01-2018 18:14:16", "19-01-2018 18:16:33" ] }
{ "_id" : { "ifIndex" : "28", "ip" : "192.168.141.1" }, "status" : [ "1", "1", "1" ], "timeStamp" : [ "19-01-2018 18:12:42", "19-01-2018 18:14:16", "19-01-2018 18:16:33" ] }
ifIndex 31 和 29 的时间戳不排序,其他排序。我在这里做错了什么?
【问题讨论】:
-
首先将时间戳从字符串更改为日期或使用 ISO 格式字符串。是否要对每个数组中的时间戳进行排序?
标签: arrays mongodb sorting aggregation-framework