【发布时间】:2012-07-14 22:29:53
【问题描述】:
有没有办法在 mongodb 中指定数据的自然排序,类似于主索引如何在 RDBMS 表中对数据进行排序?
我的用例是我的所有查询都返回按日期字段排序的数据,比如生日。根据MongoDB: Sorting and Natural Order,标准(无上限)集合的自然顺序大致是插入顺序,但不能保证。这意味着在检索数据后需要进行排序。
【问题讨论】:
标签: mongodb
有没有办法在 mongodb 中指定数据的自然排序,类似于主索引如何在 RDBMS 表中对数据进行排序?
我的用例是我的所有查询都返回按日期字段排序的数据,比如生日。根据MongoDB: Sorting and Natural Order,标准(无上限)集合的自然顺序大致是插入顺序,但不能保证。这意味着在检索数据后需要进行排序。
【问题讨论】:
标签: mongodb
如果您正在寻找类似于 RDBMS 中的主索引的东西,请按 _id 排序。由于 _id 以时间戳为前缀,因此将大致为插入顺序。如果您尝试使用 $natural 顺序,它将导致它丢失索引。
【讨论】:
另外,我要补充一点,您应该考虑使用文档 ID 中的内置时间戳,而不是依赖单独的日期字段,因为它允许您存储更少的数据并删除索引。
杰森 蒙古总部
【讨论】:
我想如果没有索引的帮助,很难实现你想要的。为了支持分片,MongoDB 中的 _id 字段基于文档创建时的时间戳取值。因此,与 RDBMS 表中的标识列不同,您不能让它们单调递增。如果所有查询都返回按出生日期排序的文档,我认为您必须在 Birthdate 列上创建一个索引。创建索引后,查询变得足够高效..
参考这个:
MongoDB capped collection and monotically increasing index
【讨论】:
我相信您指的是clustered index,而不是主索引。
MongoDB 2.0 没有聚集索引功能,因此regular index on date 将是您最有效的检索选项。
使用 MongoDB 考虑磁盘上的物理顺序可能还为时过早。 MongoDB 使用内存映射文件,因此根据您的工作集 + 查询 + RAM,您可能不需要像预期的那样频繁地从磁盘加载数据。
【讨论】: