WiredTiger MongoDB引擎排序:mongodb中的WiredTiger引擎的“自然顺序”是否相当于“有序”?

时间:2015-04-07 10:37:52

标签: mongodb wiredtiger

以下是此问题的具体原因:

db.collection.findOne()函数记录为:

  

" 如果多个文档满足查询,此方法将根据自然顺序返回第一个文档,该文档反映了磁盘上文档的顺序&# 34。

根据http://docs.mongodb.org/manual/reference/method/cursor.sort/#mmapv1,这种自然顺序的概念似乎只适用于MMAPv1而不适用于wiredTiger。

然后,我想知道使用带有wiredTiger的db.collection.findOne()是否总是返回与搜索条件匹配的第一个索引文档(具有最低_id索引的文档)。

- >然后根据_id" findOne()等同于" findFirst(); ,并且将保证订购:这是正确的吗?

谢谢,

于连

2 个答案:

答案 0 :(得分:0)

自然意味着按插入顺序,而不是按照id的顺序。 The doc并不表示它不适用于WiredTiger,因此我认为它也适用于此存储引擎:

  

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

答案 1 :(得分:0)

我不会担心究竟是什么定义了自然顺序,而是将其视为"无论数据库想要在那个时刻做什么"。您永远不应该依赖于自然顺序,因为您几乎无法保证它将如何返回文档,尤其是在您比较存储引擎时。它不是基于插入时间的订单,尽管它可能是;它不是基于磁盘上位置的订单,尽管它可能是;并且它不是基于_id的订单,尽管它可能是。它只返回文档,但实施者根据没有请求的特定订单决定是最好的还是最简单的,因此它被称为" natural"。由于它是一个实现细节,它可能随时改变。

  

我想知道使用带有wiredTiger的db.collection.findOne()是否总会返回与搜索条件匹配的第一个索引文档(具有最低_id索引的文档)

没有。如果你想要最小的_id,请在升序_id上显式排序并获取第一个结果。您始终拥有_id索引。