node-mongodb-native – 在每次调用期间,游标将返回null作为最后一个值

所以。 我有一个非常基本的脚本,连接到一个数据库,并find一个有很多文件的集合,并将其限制为3个项目。 除了在结果结尾处,一切都平稳运行,并且在成功完成后,脚本不会终止,而是悄悄地closures连接。

在这里我声明我的params并创build我的数据库对象:

 var SERVER = 'localhost', PORT = 27017, DATABASE = 'test', COLLECTION = 'coll', mongo = require('mongodb'), db = new mongo.Db(DATABASE, new mongo.Server(SERVER, PORT, {auto_reconnect: true}), {}); 

在这里,我连接到数据库,并继续用find光标和each函数来查询它:

 db.open(function(err, db) { if(err) throw err; var collection = new mongo.Collection(db, COLLECTION), cursor = collection.find({}, {}).limit(3); cursor.each(function(err, doc) { if(err) throw err; console.log(doc); }); db.close(); }); 

结果很好:

 { _id: '1', a: 'first object' } { _id: '2', a: 'second object' } { _id: '3', a: 'third object' } 

直到一点

 null 

出现。

如上所述,脚本然后继续不终止。

我不明白为什么,并会赞赏如何使它很好地终止指针。

这个问题已经有几年了,已经有了一个可能的答案,但是我只是想指出另外一个可能性,对于那些在阅读完这些后仍然感到困惑的人。 原来, each重复调用nextObject ,实际上是在光标耗尽时返回null。

这里的答案是我需要的一个: Node Mongo Native – 如何判断游标何时耗尽?

从节点的MongoDB驱动程序文档: http : //mongodb.github.io/node-mongodb-native/api-generated/cursor.html#nextobject

那是愚蠢的 在asynchronous设置中没有编程的时间过长,并且出错: db.close()调用在each循环结束前each已经完成。 由于这个,返回null并被吊死。 这里是正确的代码:

 db.open(function(err, db) { if(err) throw err; var collection = new mongo.Collection(db, COLLECTION), cursor = collection.find({}, {}).limit(3); cursor.each(function(err, doc) { if(err) throw err; if(doc !== null) console.log(doc); else db.close(); }); }); 

不pipe怎样,我希望这会给别人节省一些时间。