NodeJS与distinct()的分页

时间:2014-10-15 15:01:46

标签: node.js mongodb pagination

我从mongoDB获得了dta,我正在使用JSON API进行分页(显示ID)。

我使用require('mongoose-query-paginate');

var query = Cars.find().distinct('folder');
query.paginate(options, function(err, ids) {
    res.status('ids').send({
          ids: ids
        });
});

Error: skip cannot be used with distinct
at Query._validate (C:\nodejs\node_modules\mongoose\node_modules\mquery\lib\mquery.js:2405:11)
        ...

我遇到问题(冲突?)与skip()和distinct。

我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:0)

distinct是一个特殊用途的聚合函数,它返回一个数组而不是一个游标,它不接受跳过或限制参数。您将无法使用paginate。相反,您可以构造一个等效的聚合管道,它将为MongoDB> = 2.6:

返回一个游标
> db.cars.aggregate([{ "$group" : { "_id" : "$folder" } }])

此类光标也不接受跳过和限制,但您可以使用$skip$limit管道阶段来制作您的网页:

> db.cars.aggregate([
    { "$group" : { "_id" : "$folder" } }
    { "$skip" : 691 },
    { "$limit" : 37 }
])

作为最后一点,使用$ skip和$ limit进行分页效率很低。更好的解决方案是使用$ sort并检索每个页面作为下一个N记录>上一页中最大的记录。这可以通过聚合以及使用$ sort阶段来完成。