我想迭代包含 ~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
是一个字符串,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(...);
关于node.js - Mongoose 跳过不跳过文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800917/