猫鼬跳过不跳过文档

Its*_*has 2 mongoose node.js

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

感谢您的帮助。

rob*_*lep 9

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

Collection.find({}).skip(Number(query.skip)).limit(...)
Run Code Online (Sandbox Code Playgroud)

编辑:显然,你也传递queryfind(),如果也是一个属性,它将不起作用skip(因为 MongoDB 会认为它是一个查询字段)。

尝试这个:

var skip = Number(query.skip);
delete query.skip;
Collection.find(query).skip(skip).limit(...);
Run Code Online (Sandbox Code Playgroud)