有没有办法在mongodb中指定数据的自然顺序,类似于主索引如何在RDBMS表中对数据进行排序?
我的用例是我的所有查询都返回按日期字段排序的数据,例如生日。根据{{3}},标准(无上限)集合的自然顺序大致是插入顺序,但不能保证。这意味着在检索数据后需要进行排序。
答案 0 :(得分:1)
如果您正在寻找像RDBMS中的主索引那样的东西,那么按_id排序。它将大致是插入顺序,因为_id以时间戳为前缀。如果您尝试使用$ natural order,则会导致它丢失索引。
答案 1 :(得分:1)
我相信你指的是clustered index,而不是主要索引。
MongoDB 2.0没有聚集索引功能,因此日期regular index将是您最有效的检索选项。
使用MongoDB考虑磁盘上的物理顺序可能是过早的优化。 MongoDB使用内存映射文件,因此根据您的工作集+查询+ RAM,您可能不需要像预期的那样经常从磁盘加载数据。
答案 2 :(得分:0)
此外,我还要补充一点,您应该考虑使用文档ID中的内置时间戳,而不是依赖于单独的日期字段,因为它允许您存储更少的数据并删除索引。
杰森 MongoHQ
答案 3 :(得分:0)
我想如果没有索引的帮助就很难达到你想要的效果。为了支持分片,MongoDB中的_id字段根据创建文档时的时间戳获取值。因此,与RDBMS表中的标识列不同,您不能使它们单调增加。我认为如果所有查询都返回按Birthdate顺序排序的文档,则必须在Birthdate列上创建索引。创建索引后,查询就变得足够有效了。
请参考:
MongoDB capped collection and monotically increasing index