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

Get all the entries between two other entries in MongoDB

本文关键字:之间 两个 MongoDB 其他 获取      更新时间:2023-09-26

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

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

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

我试图实现的是.limit()和.skip()(分页)的替代方案,但通过提供"开始"answers"结束"文档的_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"},

您所说的是基于范围的分页(范围在排序上)。通过跟踪上一页和下一页的边缘,您可以轻松地做到这一点。以下是一些现有的答案:

基于范围的分页mongodb

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

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

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

似乎是在暗示插入顺序:"bar"插入在"a"之前,"foo"插入但在"bar2"之后。

您不能在mongodb中按插入顺序进行查询(可能是因为mongo有时会对集合中的文档进行重新排序,例如,如果您对"bar2"进行了更新,但没有足够的分配空间,那么mongo可以将其物理地放在"bar4"之后)。

如果您可以生成整数/长ID,或者添加一个插入时间/日期字段,那么您的问题将很容易解决。