流星/ MongoDB的:按日期排序集合返回不正确的结果

问题描述:

我试图排序基于用户的选择(名称,客户端,日期等),MongoDB的一个集合。对于名称和客户端,排序工作正常,因为它按字符串排序,但是,当按日期字段排序时,结果不准确(这很奇怪,因为将其更改为上升或下降确实会改变结果,但它不是返回正确的顺序流星/ 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年7月21日

我碰到this posting这似乎遇到类似问题给我,但是,我日期字段在保存到数据库时肯定是ISODate格式。例如,2016-04-23看起来像这样:ISODate(“2016-04-23T04:00:00Z”)。这让我认为这可能是时区问题或内部时钟问题,尽管在两台单独的计算机上本地运行它仍会返回相同的结果。

更新 - 已解决

我想通了,排序似乎是不正确的顺序的原因(它实际上是正确返回,它只是在视觉上似乎没有被这种方式)。我使用了moment.js格式化客户端的日期,这意味着如果一个对象以前有空白的日期,那么moment.js会在当前的日期填入所述的日期。这就是为什么有些日期似乎是错误的顺序,因为排序没有考虑到新添加的日期 - 这些日期并未保存到数据库中。

+0

你能创建重现它一个简单的测试案例? – MasterAM

+0

你是按多列排序?也许,还有一些其他列优先于日期。 – vijayst

+0

@MasterAM是的,我已经用新的日期值试过了,仍然得到相同的结果。 –

我想通了,排序似乎是不正确的顺序(它实际上是正确返回,它只是在视觉上似乎没有被这种方式)的原因。我使用了moment.js格式化客户端的日期,这意味着如果一个对象以前有空白的日期,那么moment.js会在当前的日期填入所述的日期。这就是为什么有些日期似乎是错误的顺序,因为排序没有考虑到新添加的日期 - 这些日期并未保存到数据库中。