获取MongoDB中其他两个条目之间的所有条目

时间:2012-01-05 20:33:51

标签: javascript node.js mongodb pagination

我有一个包含对象的MongoDB集合,其_id属性是一个字符串。

我想对该集合执行.find()操作,对返回的游标执行.sort()。然后,.toArray()的操作将按特定顺序给我一系列文档。但是,我不想提取所有这些文档,而只提取其中两个文档之间的文档。

现在,我知道我可以执行.toArray(),在数组中获取所有结果,然后选择两个文档之间的间隔,但这会花费太多资源。 如果可能的话,我希望在执行.toArray()之前选择该间隔,或者通常以最节省资源的方式选择。

我想要完成的是.limit()和.skip()(分页)的替代方法,但通过提供“开始”和“结束”文档的_id来精确定位间隔。

E.g。鉴于.find().sort({_id: 1}).toArray()给出:

{_id: "a", a: "First entry"},
{_id: "bar", a: "Third entry"},
{_id: "bar2", a: "Fourth entry"},
{_id: "bar3", a: "Fifth entry"},
{_id: "bar4", a: "Sixth entry"},
{_id: "foo", a: "SEcond entry"}

我需要类似的东西 find().sort({_id: 1}).allAfter({_id: "bar"}).allBefore({_id: "bar4"}).toArray(...); 给我:

{_id: "bar2", a: "Fourth entry"},
{_id: "bar3", a: "Fifth entry"},

2 个答案:

答案 0 :(得分:1)

你所说的是基于范围的分页(范围在哪种范围内)。您可以通过跟踪上一页和下一页的边缘来轻松完成此操作。以下是一些现有答案:

Range based paging mongodb

How to do pagination using range queries in MongoDB?

http://groups.google.com/group/mongodb-user/browse_thread/thread/dc46592112735bf0/a5c700b1283537d8

如果这不足以满足您的需求,请告诉我。

答案 1 :(得分:0)

好像你暗示插入排序:“bar”插入“a”之前,“foo”插入“bar2”之后。

您无法通过mongodb中的插入顺序进行查询(可能因为mongo有时会对集合中的文档进行重新排序,例如,如果您对“bar2”进行了更新,并且没有足够的分配空间,那么mongo可能会将其置于身后“ bar4" )。

如果您可以生成整数/长整数,或者通过为插入时间/日期添加字段,您的问题很容易解决。