如何使用 mongoose distinct, skip 和 limit 一起使用
How use mongoose distinct, skip and limit together
我需要使用 skip
和 limit
进行分页,distinct
用于不 return 等值。
如果我使用
MyModel.find().distinct('blaster', function(err, results) {
res.render('index', {
data: results
});
});
这有效。
如果我使用
MyModel.find().sort('brand').skip((page-1)*15).limit(15).exec(function(err, results) {
res.render('index', {
data: results
});
});
这也行,但如何同时使用?
如果我尝试,错误将显示:
Error: skip cannot be used with distinct
你不会那样做。 .distinct()
是一种 returns 和 "array" 的方法,因此你不能用 "cursor modifiers" 修改不是 "Cursor" 的东西,比如 .limit()
和 .skip()
.
你要的是.aggregate()
方法。不仅仅是累加:
MyModel.aggregate(
[
{ "$group": { "_id": "$blaster" } },
{ "$skip": ( page-1 ) * 15 },
{ "$limit": 15 }
],
function(err,results) {
// results skipped and limited in here
}
);
聚合框架提供了另一种实现 "distinct" 结果的方法。但是以更灵活的方式。请参阅 $group
, $skip
and $limit
.
的运算符
我需要使用 skip
和 limit
进行分页,distinct
用于不 return 等值。
如果我使用
MyModel.find().distinct('blaster', function(err, results) {
res.render('index', {
data: results
});
});
这有效。
如果我使用
MyModel.find().sort('brand').skip((page-1)*15).limit(15).exec(function(err, results) {
res.render('index', {
data: results
});
});
这也行,但如何同时使用?
如果我尝试,错误将显示:
Error: skip cannot be used with distinct
你不会那样做。 .distinct()
是一种 returns 和 "array" 的方法,因此你不能用 "cursor modifiers" 修改不是 "Cursor" 的东西,比如 .limit()
和 .skip()
.
你要的是.aggregate()
方法。不仅仅是累加:
MyModel.aggregate(
[
{ "$group": { "_id": "$blaster" } },
{ "$skip": ( page-1 ) * 15 },
{ "$limit": 15 }
],
function(err,results) {
// results skipped and limited in here
}
);
聚合框架提供了另一种实现 "distinct" 结果的方法。但是以更灵活的方式。请参阅 $group
, $skip
and $limit
.