在 MongoDB 中,db.collection.find() 是否与 db.collection.find().sort({$natural:1}) 相同?

In MongoDB, is db.collection.find() same as db.collection.find().sort({$natural:1})?

我相信这很容易,但我只是想确认一下。具有某些搜索和投影标准的 find() 是否与在其上应用 sort({$natural:1}) 相同?

另外,默认的自然排序顺序是什么?它与 sort({_id:1}) 有何不同?

db.collection.find() 的结果与 db.collection.find().sort({$natural:1})

相同

{"$natural" : 1} 强制查找查询执行 table 扫描(默认排序),它在排序中使用时指定 硬盘顺序

当您更新文档时,mongo可以将您的文档移动到硬盘的另一个位置。

例如插入文档如下

{
    _id : 0, 
},
{
    _id : 1, 
}

然后更新:

db.collection.update({ _id : 0} , { $set : { blob : BIG DATA}})

当您执行查找查询时,您将得到

{
    "_id" : 1
},
{
    "_id" : 0,
    "blob" : BIG DATA
}

如您所见,文档的顺序已更改 => 默认顺序不是按 _id

如果您不指定排序,则 mongodb find() 将 return 文档按照它们在磁盘上的存储顺序排列。磁盘上的文档存储可能与插入顺序一致,但并非总是如此。还值得注意的是,文件在磁盘上的位置可能会发生变化。例如,在更新的情况下,mongodb 可以根据需要将文档从一个地方移动到另一个地方。

如果是索引 - 如果查询使用索引,默认顺序将是找到索引的顺序。

$natural 是文件在磁盘上的查找顺序。

建议您明确指定排序以确保排序顺序。