【发布时间】:2012-02-03 16:24:21
【问题描述】:
我有一个包含对象的 MongoDB 集合,其 _id 属性是一个字符串。
我想对该集合执行 .find() 操作,对返回的游标执行 .sort() 。然后, .toArray() 的操作会给我一个特定顺序的文档数组。但是,我不想提取所有这些文档,而只想提取其中两个之间的文档。
现在,我知道我可以执行 .toArray(),将我的所有结果放在一个数组中,然后选择两个文档之间的间隔,但这会花费太多资源。 如果可能,我希望在执行 .toArray() 之前选择该间隔,或者通常以最节省资源的方式。
我想要完成的是 .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"},
【问题讨论】:
-
这没什么意义,因为 before 和 after 意味着一个预期的顺序(或排序)。如果您想排序一次以找到两个值之间的文档,那么您必须在客户端中排序以将它们以另一个顺序返回给用户。
-
不,我想按相同的顺序返回给客户端。而且我不想选择“两个值之间的文档”,而是选择其他两个文档之间的文档。
-
请提供文件示例和您想要退回的文件,以及如何退回。如果没有排序/顺序,您的“其他两个文件之间的描述”是没有意义的;也许你的意思是广告订单...
-
我重写了这个问题,希望现在更干净。
标签: javascript node.js mongodb pagination