Node.js 猫鼬不跳';不要跳过文档

Node.js 猫鼬不跳';不要跳过文档,node.js,mongoose,Node.js,Mongoose,我想对包含~31k个文档的集合进行迭代。 每次我想查询返回100个文档时,使用跳过从第一个文档开始,然后返回下一个100,依此类推。 我正在从请求中获取跳过索引: find: function (req, res) { var name = "node" var limit = 100; console.log(req); var query = {}; query = req

我想对包含~31k个文档的集合进行迭代。 每次我想查询返回100个文档时,使用
跳过
从第一个文档开始,然后返回下一个100,依此类推。
我正在从请求中获取
跳过
索引:

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
:101201。。。所以问题一定在我的查询中:

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

谢谢您的帮助。

我猜
查询。skip
是一个字符串,MongoDB希望它是一个数字:

Collection.find({}).skip(Number(query.skip)).limit(...)
< > > >编辑< /强>:很明显,您正在通过“代码>查询<代码> > <代码>查找())/代码>,如果<代码>跳过也是一个属性(如MangGDB将认为它是查询字段),这将不起作用。

试试这个:

var skip = Number(query.skip);
delete query.skip;
Collection.find(query).skip(skip).limit(...);

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

Collection.find({}).skip(Number(query.skip)).limit(...)
< > > >编辑< /强>:很明显,您正在通过“代码>查询<代码> > <代码>查找())/代码>,如果<代码>跳过也是一个属性(如MangGDB将认为它是查询字段),这将不起作用。

试试这个:

var skip = Number(query.skip);
delete query.skip;
Collection.find(query).skip(skip).limit(...);

就像我所说的那样:

var skipInNumber = Number(query.skip);
以及查询:

Collection.find(query).skip(skipInNumber).limit(limit).toArray(function(err, docs) {
                console.log(docs);
                res.send(docs);
            });

积分归评论杜德。

所以就像我使用的评论一样:

var skipInNumber = Number(query.skip);
以及查询:

Collection.find(query).skip(skipInNumber).limit(limit).toArray(function(err, docs) {
                console.log(docs);
                res.send(docs);
            });

积分归注释dude。

不,当我控制台记录它的编号时。@ItsikMauyhas我不知道它怎么可能已经是一个编号了,因为您正在使用
url.parse()
来获取它。好的,该函数将始终返回字符串。那么也许你没有发布你所有的代码?要进行快速检查,只需使用传递给
.skip()
的硬编码值即可。这是一个字符串,您是对的,但它仍然无法解决问题。它是否与索引有任何连接?我应该为集合编制索引吗?如果您记录
typeof(Number(query.skip))
,它显然总是一个数字。您需要确保将该值作为数字传递给查询(您发布的问题现在包含两个不同版本的查询)。
skip()
不需要索引就可以工作。不需要,当我对其编号的日志类型进行控制台时。@itsikmauy因为您使用
url.parse()
来获取它,所以我不知道它怎么可能已经是一个编号。好的,该函数将始终返回字符串。那么也许你没有发布你所有的代码?要进行快速检查,只需使用传递给
.skip()
的硬编码值即可。这是一个字符串,您是对的,但它仍然无法解决问题。它是否与索引有任何连接?我应该为集合编制索引吗?如果您记录
typeof(Number(query.skip))
,它显然总是一个数字。您需要确保将该值作为数字传递给查询(您发布的问题现在包含两个不同版本的查询)。
skip()
不需要索引即可工作。您在mongo控制台上尝试过相同的查询吗?我将在mongo控制台中发布结果。效果良好。您在mongo控制台上尝试过相同的查询吗?我将在mongo控制台中发布结果。效果良好。