【发布时间】:2015-02-28 00:21:45
【问题描述】:
我确定这很容易,但我只是想确定一下。 find() 与一些搜索和投影标准是否与在其上应用 sort({$natural:1}) 相同?
另外,默认的自然排序顺序是什么?比如,它与sort({_id:1}) 有何不同?
【问题讨论】:
我确定这很容易,但我只是想确定一下。 find() 与一些搜索和投影标准是否与在其上应用 sort({$natural:1}) 相同?
另外,默认的自然排序顺序是什么?比如,它与sort({_id:1}) 有何不同?
【问题讨论】:
db.collection.find() 的结果与db.collection.find().sort({$natural:1}) 相同
{"$natural" : 1} 强制查找查询进行表扫描(默认排序),它在用于排序时指定硬盘顺序。
当您更新文档时,mongo 可以将您的文档移动到硬盘的另一个位置。
例如插入文档如下
{
_id : 0,
},
{
_id : 1,
}
然后更新:
db.collection.update({ _id : 0} , { $set : { blob : BIG DATA}})
当你执行 find 查询时,你会得到
{
"_id" : 1
},
{
"_id" : 0,
"blob" : BIG DATA
}
如您所见,文档的顺序已更改 => 默认顺序不是按 _id
【讨论】:
find() 查询,然后有一个光标,然后几天后,我再做一次find() 并得到另一个游标,这两个游标中的文档顺序会有所不同吗?当然,假设文档有很多更新。
如果您不指定排序,则 mongodb find() 将按照文档存储在磁盘上的顺序返回文档。磁盘上的文档存储可能与插入顺序一致,但并非总是如此。还值得注意的是,磁盘上文档的位置可能会发生变化。例如,在更新的情况下,mongodb 可能会根据需要将文档从一个地方移动到另一个地方。
如果是索引 - 如果查询使用索引,默认顺序将是找到索引的顺序。
$natural 是在磁盘上找到文档的顺序。
建议您明确指定排序以确保排序顺序。
【讨论】: