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

我有一个MongoDB集合的对象,它的_id属性是一个string。

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

现在,我明白我可以执行一个.toArray(),将所有的结果都放在一个数组中,然后select两个文档之间的间隔,但这会花费太多的资源。 如果可能,我希望在执行.toArray()之前select该间隔,或者通常以最节省资源的方式select该间隔。

我试图完成的是.limit()和.skip()(分页)的替代方法,但是通过提供_id的“开始”和“结束”文档来指出时间间隔。

例如, .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"}, 

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

基于范围的分页mongodb

如何在MongoDB中使用范围查询进行分页?

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

让我知道如果这不足以满足您的需求。

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

你不能通过在mongodb中的插入顺序进行查询(也许是因为mongo有时会重新sorting集合中的文档,例如,如果你更新了“bar2”而没有足够的分配空间,那么mongo可以把它放在“bar4”之后) 。

如果您可以生成整数/长整型ID,或者通过添加插入时间/date的字段,则可以轻松解决问题。