我想迭代包含 ~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);
});
});
Run Code Online (Sandbox Code Playgroud)
控制台日志显示query.skip:1, 101, 201 ...所以问题一定出在我的查询中:
Collection.find(query).skip(Number(query.skip)).limit(limit).toArray(function(err, docs) {
console.log(docs);
res.send(docs);
});
Run Code Online (Sandbox Code Playgroud)
但查询返回的文档对于每个请求都是相同的:
req 1 [{nid : 4033},{nid:4501}]
req 2 [{nid : 4033},{nid:4501}]
Run Code Online (Sandbox Code Playgroud)
跳过值为 Number :
skip typeof : number
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助。
我的猜测是这query.skip是一个字符串,MongoDB 希望它是一个数字:
Collection.find({}).skip(Number(query.skip)).limit(...)
Run Code Online (Sandbox Code Playgroud)
编辑:显然,你也传递query给find(),如果也是一个属性,它将不起作用skip(因为 MongoDB 会认为它是一个查询字段)。
尝试这个:
var skip = Number(query.skip);
delete query.skip;
Collection.find(query).skip(skip).limit(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3373 次 |
| 最近记录: |