MongoDB自然排序返回objectid在时间上被洗牌的数据

MongoDB自然排序返回objectid在时间上被洗牌的数据,mongodb,sorting,datetime,Mongodb,Sorting,Datetime,我执行以下查询: db.preference.find({}, {_id: 1}).sort({$natural: 1}).forEach(function(d) { print(d._id.getTimestamp()) }) 以下是部分输出: Thu Mar 26 2015 12:39:06 GMT+0100 (CEST) Thu Mar 26 2015 12:41:07 GMT+0100 (CEST) Thu Mar 26 2015 12:48:55 GMT+0100 (CEST

我执行以下查询:

db.preference.find({}, {_id: 1}).sort({$natural: 1}).forEach(function(d) { 
  print(d._id.getTimestamp()) 
})
以下是部分输出:

Thu Mar 26 2015 12:39:06 GMT+0100 (CEST)
Thu Mar 26 2015 12:41:07 GMT+0100 (CEST)
Thu Mar 26 2015 12:48:55 GMT+0100 (CEST)
Mon Mar 30 2015 17:08:44 GMT+0200 (CEST)
Tue Mar 31 2015 12:34:36 GMT+0200 (CEST)
Tue Mar 31 2015 12:35:01 GMT+0200 (CEST)
Tue Mar 31 2015 12:34:47 GMT+0200 (CEST)
Thu Nov 20 2014 10:55:07 GMT+0100 (CEST)
Wed Apr 29 2015 10:02:33 GMT+0200 (CEST)
Wed Apr 29 2015 10:02:53 GMT+0200 (CEST)
Wed Apr 29 2015 10:03:13 GMT+0200 (CEST)
Wed Apr 29 2015 10:00:11 GMT+0200 (CEST)
Wed Apr 29 2015 10:18:23 GMT+0200 (CEST)
Mon Feb 23 2015 11:54:11 GMT+0100 (CEST)
Tue May 12 2015 16:40:45 GMT+0200 (CEST)
Fri May 15 2015 17:04:04 GMT+0200 (CEST)
Wed May 14 2014 18:13:40 GMT+0200 (CEST)
Tue Jun 09 2015 14:17:11 GMT+0200 (CEST)
Tue Jun 16 2015 16:03:31 GMT+0200 (CEST)
Tue Nov 04 2014 21:15:21 GMT+0100 (CEST)
Fri Mar 14 2014 10:16:48 GMT+0100 (CEST)
Wed Jun 17 2015 11:14:57 GMT+0200 (CEST)
Fri Mar 14 2014 10:15:30 GMT+0100 (CEST)
很容易看出日期被严重地打乱了,而我希望严格按照升序排列

集合没有上限,文档经常被修改。ObjectID从未在代码中显式生成。集合未共享

你知道为什么自然排序是这样吗

有人能解释一下自然排序的原理吗

你期待什么

使用$natural运算符可以对结果使用自然顺序 排序操作。自然顺序是指事物的逻辑顺序 数据库内部的文档

$natural运算符使用以下语法以 它们在磁盘上的存在顺序:


请参阅。

$natural
返回磁盘上的订单,以便可以移动文档。要么显式地
.sort({“\u id”:1})
,然后按时间戳顺序“排序”,要么创建时间戳。即使没有
$natural
,顺序也不会总是按时间戳的顺序递增。如果更新操作无法适应文档当前空间,即文档增长,则文档可以在磁盘上移动。这或许可以解释这种混乱