我从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。
我该如何解决? 谢谢!
答案 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阶段来完成。