我想迭代包含~31k文档的集合。
每次我想查询以使用skip
返回100个文档从第一个文档开始并返回下一个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
感谢您的帮助。
答案 0 :(得分:4)
我的猜测是 synchronized (MyClass.class) {
System.out.println(Thread.currentThread().getName() + " == " + MyClass1.incAndGet());
}
是一个字符串,MongoDB希望它是一个数字:
query.skip
编辑:显然,您已将Collection.find({}).skip(Number(query.skip)).limit(...)
传递给query
,如果find()
也是属性(因为MongoDB会将其视为查询字段)。
试试这个:
skip
答案 1 :(得分:0)
所以评论说我使用:
var skipInNumber = Number(query.skip);
和查询:
Collection.find(query).skip(skipInNumber).limit(limit).toArray(function(err, docs) {
console.log(docs);
res.send(docs);
});
学分归于评论家。