MongoDB 2.6 + NodeJS无法迭代游标

时间:2015-02-20 14:07:55

标签: node.js mongodb

我真的无法弄清楚出了什么问题,请帮助。

MongoDB版本2.6.7

我可以毫无问题地插入,但查找功能预制件非常有线,请参阅下面的代码。

代码A效果很好。

var mongoClient = require("mongodb").MongoClient;
var express = require("express");
var app = express(); 

mongoClient.connect("mongodb://localhost:27017/feeding", function(err,database){
    if(!err){
        db.collection('test').find({}).toArray(function(err, users){
            console.log(users);
        });
        app.listen(8888, function(){
            console.log("Server Started");
        });
    }else{
        console.dir(err);
    }
});

低于B代码会抛出'TypeError: undefined is not a function' at line 25

var mongoClient = require("mongodb").MongoClient;
var express = require("express");
var app = express(); 

mongoClient.connect("mongodb://localhost:27017/feeding", function(err,database){
    if(!err){
        var cursor = db.collection('test').find({});
        while (cursor.hasNext()) { //line 25
            console.log("printed");
        }
        app.listen(8888, function(){
            console.log("Server Started");
        });
    }else{
        console.dir(err);
    }
});

我相信它说hasNext()不是一个函数,但是引用MongoDB文档http://docs.mongodb.org/manual/tutorial/iterate-a-cursor/,似乎代码没有任何问题,花了几个小时才解决这个问题。任何人都可以给我一个建议吗?

1 个答案:

答案 0 :(得分:1)

代码B中的行应该在Mongo shell中使用,而不是在Node.js脚本中使用。为此,您需要使用Node.js MongoDB驱动程序。

检查光标对象here的文档。

您需要使用cursor.nextObject()方法并检查返回的对象是否为null,这表示您已到达终点。