mongoose skip不跳过文档

时间:2015-11-19 10:14:01

标签: node.js mongoose

我想迭代包含~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

感谢您的帮助。

2 个答案:

答案 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);
            });

学分归于评论家。