【问题标题】:Meteor/MongoDB: Sorting collection by date is returning incorrect resultsMeteor/MongoDB:按日期排序集合返回不正确的结果
【发布时间】:2016-07-22 14:44:15
【问题描述】:

我正在尝试根据用户的选择(名称、客户端、日期等)对 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-05-25
2016-05-25
2016-05-25
2016-04-23
2016-04-23
2016-04-23
2016-03-23
2016-03-23
2016-03-23
2016-07-21
2016-07-21
2016-07-21

我遇到了this posting,它似乎与我有类似的问题,但是,当我的日期字段保存到数据库时,它们肯定是 ISODate 格式。例如,2016-04-23 看起来像这样:ISODate("2016-04-23T04:00:00Z")。这让我觉得这可能是一个时区问题或内部时钟问题,尽管在两台不同的计算机上本地运行它仍然返回相同的结果。

更新已解决:

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

【问题讨论】:

  • 你能创建一个简单的测试用例来重现它吗?
  • 您是否按多列排序?也许,还有其他列优先于日期。
  • @MasterAM 是的,我已经尝试使用新的日期值,但仍然得到相同的结果。
  • 好吧,我的意思是你会和我们分享:)
  • @Vijay 不,我上面写的查询就是我所有的查询,它只有一个参数可供排序。另外,我直接从 meteor mongo shell 运行排序并得到相同的结果。

标签: mongodb sorting meteor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2021-11-20
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多