我正在尝试根据用户的选择(名称,客户端,日期等)对MongoDB集合进行排序。对于名称和客户端,排序工作正常,因为它按字符串排序,但是,按日期字段排序时,结果不准确(这很奇怪,因为将其更改为升序或降序实际上会更改结果,但它不是以正确的顺序返回。
以下是排序代码:
let sort_order = {};
//columnSortType is date field and columnSortDirection is either 1 or -1
sort_order[instance.state.get("columnSortType")] = instance.state.get("columnSortDirection");
if (instance.state.get("showAllServers")) {
return Servers.find({}, {sort: sort_order});
}
以下示例结果可让您更好地了解混乱的订单(只返回日期字段)。这是按升序排序。按降序排序只需翻转下面的列表:
2016年5月25日
2016年5月25日
2016年5月25日
2016年4月23日
2016年4月23日
2016年4月23日
2016年3月23日
2016年3月23日
2016年3月23日
2016年7月21日
2016年7月21日
2016-07-21
我遇到this posting似乎对我有类似的问题,但是,当我们的日期字段保存到数据库时,它们肯定是ISODate格式。例如,2016-04-23看起来像这样:ISODate(" 2016-04-23T04:00:00Z")。这让我觉得这可能是时区问题或内部时钟问题,尽管在两台独立的计算机上本地运行仍会返回相同的结果。
UPDATE-已解决:
我想出了排序似乎是错误顺序的原因(它实际上正确地返回,它只是在视觉上看起来不是那样)。我使用moment.js来格式化客户端上的日期,这意味着如果一个对象以前有一个空白日期,则moment.js会用当前日期填充所述日期。这就是为什么有些日期似乎是错误的顺序,因为排序没有考虑新添加的日期 - 这些日期没有保存到数据库中。
答案 0 :(得分:0)
我想出了排序似乎是错误顺序的原因(它实际上正确地返回,它只是在视觉上看起来不是那样)。我使用moment.js来格式化客户端上的日期,这意味着如果一个对象以前有一个空白日期,则moment.js会用当前日期填充所述日期。这就是为什么有些日期似乎是错误的顺序,因为排序没有考虑新添加的日期 - 这些日期没有保存到数据库中。