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怎样,我希望这会给别人节省一些时间。