如何使用mongoose distinct,skip和limit

时间:2015-01-14 15:50:03

标签: javascript node.js mongodb mongoose

我需要使用skiplimit进行分页,而distinct则不会返回相等的值。

如果我使用

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

1 个答案:

答案 0 :(得分:8)

你不这样做。 .distinct()是一个返回“数组”的方法,因此您无法使用“.limit().skip()等”光标修饰符“修改不是”光标“的内容。

你想要的是.aggregate()方法。不仅仅是添加东西:

MyModel.aggregate(
    [
        { "$group": { "_id": "$blaster" } },
        { "$skip": ( page-1 ) * 15 },
        { "$limit": 15 }
    ],
    function(err,results) {
       // results skipped and limited in here
    }
);

聚合框架提供了另一种实现“不同”结果的方法。但是以更灵活的方式。请参阅$group$skip$limit的运算符。