mongoose跳过不会跳过文档

我想遍历包含〜31k文档的我的集合。 每次我想查询返回100文档使用skip从第一个文档开始,并返回下一个100等。 我从请求中获取skip索引:

 find: function (req, res) { var name = "node" var limit = 100; console.log(req); var query = {}; query = req.query; var url_parts = url.parse(req.url, true); var query = url_parts.query; console.log("skip typeof : " + typeof(Number(query.skip))); var Collection = getCollection(name); Collection.find(query).skip(Number(query.skip)).limit(limit).toArray(function(err, docs) { console.log(docs); res.send(docs); }); }); 

控制台日志显示query.skip :1,101,201 …所以问题必须在我的查询:

 Collection.find(query).skip(Number(query.skip)).limit(limit).toArray(function(err, docs) { console.log(docs); res.send(docs); }); 

但查询返回的文档对于每个请求都是相同的:

 req 1 [{nid : 4033},{nid:4501}] req 2 [{nid : 4033},{nid:4501}] 

跳过数值是数字:

 skip typeof : number 

谢谢你的帮助。

我的猜测是query.skip是一个string,MongoDB希望它是一个数字:

 Collection.find({}).skip(Number(query.skip)).limit(...) 

编辑 :显然,你传递query find()以及,如果skip也是一个属性(因为MongoDB将认为这是一个查询字段)将无法正常工作。

尝试这个:

 var skip = Number(query.skip); delete query.skip; Collection.find(query).skip(skip).limit(...); 

所以就像我说的评论一样:

 var skipInNumber = Number(query.skip); 

和查询:

 Collection.find(query).skip(skipInNumber).limit(limit).toArray(function(err, docs) { console.log(docs); res.send(docs); }); 

学分去评论老兄。