Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取MongoDB中其他两个条目之间的所有条目_Javascript_Node.js_Mongodb_Pagination - Fatal编程技术网

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

Javascript 获取MongoDB中其他两个条目之间的所有条目,javascript,node.js,mongodb,pagination,Javascript,Node.js,Mongodb,Pagination,我有一个包含对象的MongoDB集合,其_id属性是字符串 如果要对该集合执行.find()操作,请对返回的游标执行.sort()。然后,对.toArray()的操作将按特定顺序为我提供一个文档数组。但是,我不想提取所有这些文档,而只提取其中两个文档之间的文档 现在,我知道我可以执行一个.toArray(),在一个数组中获取所有结果,然后选择两个文档之间的间隔,但这将花费太多的资源。 如果可能的话,我希望在执行.toArray()之前选择该间隔,或者通常以最节省资源的方式 我试图实现的是.lim

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

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

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

我试图实现的是.limit()和.skip()的替代(分页),但通过提供“开始”和“结束”文档的id来确定间隔

例如,给定
.find().sort({u 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({u id:1}).allAfter({u id:bar}).allBefore({u id:bar4}).toArray(…)
给我:

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

似乎你在暗示插入顺序:“bar”在“a”之前插入,“foo”在“bar2”之后插入

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


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

似乎是在暗示插入顺序:“bar”插入在“a”之前,“foo”插入在“bar2”之后

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


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

您所说的是基于范围的分页(其中范围在排序中)。通过跟踪上一页和下一页的边缘,您可以轻松地完成此操作。以下是一些现有的答案:


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

您所说的是基于范围的分页(其中范围在排序中)。通过跟踪上一页和下一页的边缘,您可以轻松地完成此操作。以下是一些现有的答案:


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

这无关紧要。在我已经有了光标并对其应用了.sort()之后,我需要在两个结果之间进行选择$lt和$gt不起作用,因为我有时可能有不同的排序顺序(我传递给.sort()的内容未知)。啊哈,我当时不明白你的问题。你需要在搜索中搜索。这是单个搜索“会话”的一部分,还是您先搜索并排序,让用户选择结果的子集,然后再搜索?搜索、排序(像通常的MongoDB查询一样),然后选择这些结果的子集。如果你想一个更容易理解的解释,请编辑我的帖子。我不明白,那么你为什么不把它作为查询的一部分,这个子集的选择。因为,假设我有30000个查询返回的结果并加载到内存中。除此之外,这是一个繁重的操作,我还必须通过遍历所有记录来选择其中的一个子集(在一个子集之后,在另一个子集之前),从而使操作更加繁重。这与此无关。在我已经有了光标并对其应用了.sort()之后,我需要在两个结果之间进行选择$lt和$gt不起作用,因为我有时可能有不同的排序顺序(我传递给.sort()的内容未知)。啊哈,我当时不明白你的问题。你需要在搜索中搜索。这是单个搜索“会话”的一部分,还是您先搜索并排序,让用户选择结果的子集,然后再搜索?搜索、排序(像通常的MongoDB查询一样),然后选择这些结果的子集。如果你想一个更容易理解的解释,请编辑我的帖子。我不明白,那么你为什么不把它作为查询的一部分,这个子集的选择。因为,假设我有30000个查询返回的结果并加载到内存中。除了这是一个繁重的操作之外,我还必须通过遍历所有记录来选择其中的一个子集(在一个子集之后,在另一个子集之前),从而使操作变得更加繁重。这没有什么意义,因为前后意味着预期的顺序(或排序)。如果要排序一次以查找两个值之间的文档,则必须在客户端中排序,以另一个顺序将它们返回给用户。否,我希望以相同的顺序返回给客户端。我不想选择“两个值之间的文档”,而是选择其他两个文档之间的文档。请提供一个文档示例和您想要返回的文档,以及如何返回。如果没有排序/顺序,您的“两份其他文件之间的描述”毫无意义;也许你指的是插入顺序……我重写了这个问题,我希望它现在更清晰。这没有什么意义,因为前后意味着预期的顺序(或排序)。如果要排序一次以查找两个值之间的文档,则必须在客户端中排序,以另一个顺序将它们返回给用户。否,我希望以相同的顺序返回给客户端。我不想选择“两个值之间的文档”,而是选择其他两个文档之间的文档。请提供一个文档示例和您想要返回的文档,以及如何返回。如果没有排序/顺序,您的“两份其他文件之间的描述”毫无意义;也许你的意思是插入顺序…我重写了问题,我希望它现在更干净。我想我