Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 如何将Mongoose排序查询偏移到特定文档之后开始_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 如何将Mongoose排序查询偏移到特定文档之后开始

Javascript 如何将Mongoose排序查询偏移到特定文档之后开始,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我目前有以下查询返回给定状态的最新更新帖子的计数 var query = Post.find() .where('status').equals(status) .sort('-updated') .limit(count); 如果状态为“已批准”且计数为3,则我的结果如下所示: [ { "id": "test1", "updated": "2015-11-30T16:51:54.988Z", "status": "approved", }, {

我目前有以下查询返回给定
状态的
最新更新帖子的
计数

var query = Post.find()
  .where('status').equals(status)
  .sort('-updated')
  .limit(count);
如果
状态
为“已批准”且
计数
为3,则我的结果如下所示:

[
  {
    "id": "test1",
    "updated": "2015-11-30T16:51:54.988Z",
    "status": "approved",
  },
  {
    "id": "test2",
    "updated": "2015-11-30T16:51:52.125Z",
    "status": "approved",
  },
  {
    "id": "test3",
    "updated": "2015-11-30T16:51:50.469Z",
    "status": "approved",
  }
]
我需要能够指定一个
id
来抵消我的结果

例如,如果
状态
为“已批准”,
计数
为2,偏移id为“test1”,则结果应为:

[
  {
    "id": "test2",
    "updated": "2015-11-30T16:51:52.125Z",
    "status": "approved",
  },
  {
    "id": "test3",
    "updated": "2015-11-30T16:51:50.469Z",
    "status": "approved",
  }
]

因此,我按更新的属性排序,但结果应仅从偏移id之后的文档开始。

您不能按特定id进行偏移,但可以使用
skip()
跳过一定数量的文档


我想排除您不需要跳过的id,没有其他解决方案:

var query = Post.find({
        $and: [{
            status: status
        }, {
            id: {
                $nin: ['test1']
            }
        }]
    })
    .sort('-updated')
    .limit(count);

使用
$nin
可以通过使用如下id数组排除多个
id
['test1','test2','etc..。]

您应该从query@Michelem我只是以test1为例,这将需要对任何文档起作用,这意味着排除在我想要的日期之前更新的所有ID。我并不总是知道它们是什么,因为它们一直在被添加。谢谢你的回答,但我认为它们不会提供可靠的结果。使用
skip()。第二种方法不起作用,因为
。limit(count)
将返回我需要的帖子数量。我必须查询整个集合,以确保我可以跳到所需的文档并返回正确的金额。不幸的是,这不起作用,因为我需要排除在我想要的日期之前更新的所有ID。我不能保证我会知道它们是什么,因为它们一直在添加。我认为你需要检查你的应用程序的逻辑,因为我认为你做得不好。我认为你是对的,看起来我应该用更新的属性而不是特定的文档来抵消。类似于
where('updated').gt(aDateObject)
。我会把这个标记为正确的,因为它似乎是你能得到的最接近标题所要求的。
var query = Post.find()
    .where('status').equals(status)
    .sort('-updated')
    .limit(count);

var offsetId = 'test1';
var filteredDocs = [];

query.exec().then(function (docs) {
    var skipped = true;
    docs.forEach(function (doc) {
        if (skipped && doc.id == offsetId) skipped = false;
        if (!skipped) filteredDocs.push(doc);
    });
});
var query = Post.find({
        $and: [{
            status: status
        }, {
            id: {
                $nin: ['test1']
            }
        }]
    })
    .sort('-updated')
    .limit(count);