在我的User系列中,MongoDB通常按照我创建新文档的相同顺序对每个新文档进行排序:最后创建的文档是该系列中的最后一个.但我发现了另一个集合,我创建的上一个集合在27个文档之间有6个位置.
为什么?
MongoDB collection中每个文档的顺序是什么?
在我的User系列中,MongoDB通常按照我创建新文档的相同顺序对每个新文档进行排序:最后创建的文档是该系列中的最后一个.但我发现了另一个集合,我创建的上一个集合在27个文档之间有6个位置.
为什么?
MongoDB collection中每个文档的顺序是什么?
它叫自然秩序:
自然秩序
这证实了,通常情况下,你会按照插入的顺序获取它们,但这并不能保证——正如你所注意到的那样.
回归自然
$natural
参数根据数据库中的自然秩序返回项目.这种排序是一种内部实现功能,您不应该依赖其中的任何特定 struct .索引使用
包含按
$natural
顺序排序的查询不使用索引来实现查询谓词,但以下情况除外:如果查询谓词是_id
字段{ _id: <value> }
上的相等条件,则按$natural
顺序排序的查询可以使用_id
索引.MMAPv1
通常,自然顺序反映插入顺序,但MMAPv1存储引擎除外.对于MMAPv1存储引擎,如果文档因document growth次或删除操作而重新定位,则自然顺序不会反映插入顺序,因为新插入的文档会占用空间.
显然,就像上面提到的文档一样,您应该依赖于这个默认顺序(This ordering is an internal implementation feature, and you should not rely on any particular structure within it.).
如果你需要分类,使用sort solutions.
基本上,以下两个调用应该以相同的顺序返回文档(因为默认顺序是$natural
):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
如果要按另一个字段(例如name
)排序,可以执行以下操作:
db.mycollection.find().sort({ "name": 1 })