所以,我在MongoDB
中的以下模型中有数据:
_id
uniq_id
(每个uniq_id
会有多个文档)现在,在我的代码中的某个地方,我希望为给定的uniq_id
提取最早的100个文档。所以我运行这个查询:
db.students.find({uniq_id:"xyz"}).limit(100).sort({ts:1})
我现在的问题是:
limit()
如何运作?它会使用默认的_id
来获取前100个文档吗?换句话说,如果我有find()
生成的1100个文档,我知道limit(100)
能够提取文档1-100。它是通过使用默认的_id
索引吗?
要根据时间戳对其进行排序(再次强调我想要最早的100个文档),我是否需要在uniq_id
和时间戳上设置复合索引,或者最好创建两个单一的uniq_id
上的索引和时间戳分别?
我假设两个单字段索引可以完成这项工作。有人可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
ts
排序。当通过查询优化器时,MongoDB将首先根据给定的排序键进行排序,然后限制结果。您应该使用复合索引。但请记住,order matters。因此,对于您的示例,应创建复合索引
db.students.ensureIndex({uniq_id:1,ts:1})
使用.explain()
找出最适合您的方式。
HTH。