如何将Mongoose排序查询偏移到特定文档之后启动
How to offset a Mongoose sort query to start after a specific document
我目前有以下查询来返回给定status
的count
最近更新的帖子。
var query = Post.find()
.where('status').equals(status)
.sort('-updated')
.limit(count);
如果status
是"批准的",而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
来将我的结果偏移.
例如,如果status
为"已批准",count
为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。您不需要跳过它们,没有任何其他解决方案:
var query = Post.find({
$and: [{
status: status
}, {
id: {
$nin: ['test1']
}
}]
})
.sort('-updated')
.limit(count);
使用$nin
,您可以使用如下id数组排除多个id
:['test1', 'test2', 'etc...']
您不能通过特定的id进行偏移,但可以使用skip()
跳过一定数量的文档。
var query = Post.find()
.where('status').equals(status)
.sort('-updated')
.limit(count)
.skip(1); // <<< put the number of docs you want to skip here
如果你想跳过之前的所有文档并包括特定的id,你必须手动完成(如果你需要,我可以发布代码)。
编辑
跳过所有文档直到到达特定文档:
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);
});
});
相关文章:
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 谷歌文档表面引擎
- 来自文档或下一个静态父级的事件委派
- 如何将childNodes用于XML文档
- 文档就绪提供了错误的选择器高度
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- 在 Opera 浏览器中替代文档启动
- 为什么首先单击文档空白处的任何位置启动代码,而不是单击超链接,以及为什么打开了太多选项卡
- 如何从 HTML 文档中的外部 JS 调用/启动此函数
- 为什么@require jQuery 会在具有 @run-at 文档启动的脚本中抛出错误
- 如何检测文档加载已通过javascript启动
- 如何将Mongoose排序查询偏移到特定文档之后启动
- iPhone文档mousedown事件未启动
- Chrome扩展在文档启动时运行
- 当文档准备就绪时,单击事件Jquery启动
- Jquery文档准备在动态加载的HTML上提前启动