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

Posted

技术标签:

【中文标题】node-mongodb-native - 游标在每次调用期间返回 null 作为最后一个值【英文标题】:node-mongodb-native - cursor returns null as last value during an each call 【发布时间】:2012-08-25 16:37:06 【问题描述】:

所以。我有一个非常基本的脚本,它连接到数据库并在包含大量文档的集合上执行 find 并将其限制为 3 个项目。一切运行顺利,除了在我的结果结束时,null 并且脚本不会终止,而是在成功后安静地关闭连接。

在这里我声明我的参数并创建我的数据库对象:

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

出现。

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

我不明白为什么,并希望得到有关如何使它很好地终止的指针。

【问题讨论】:

【参考方案1】:

嗯,那太愚蠢了。没有在异步设置中编程的时间太长,您会犯错误:db.close() 调用在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();
 );
);

我希望它能以某种方式为某人节省一些时间。

【讨论】:

【参考方案2】:

这个问题已经有几年的历史了,并且已经有了一个可能的答案,但我只是想为那些在阅读本文后仍然感到困惑的人指出另一种可能性。事实证明,each 反复调用 nextObject,实际上是为了在光标耗尽时返回 null。

这里的答案是我需要的:Node Mongo Native - how to tell when a cursor is exhausted?

来自 Node MongoDB 驱动程序文档:http://mongodb.github.io/node-mongodb-native/api-generated/cursor.html#nextobject

【讨论】:

这应该是实际的答案。 甚至,在调用 cursor.each 期间,我得到了一个 null 作为最后一个值。 nodejs 版本:0.12.9,mongodb ddriver 版本:^2.2.33。很高兴我看到了这个答案。

以上是关于node-mongodb-native - 游标在每次调用期间返回 null 作为最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

Lambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层

带有nestjs的Angular-universal:错误:找不到模块'./drivers/node-mongodb-native/connection'

Nodejs学习笔记--- 与MongoDB的交互(mongodb/node-mongodb-native)MongoDB入门

Koa 操作 Mongodb 数据库

node.js mongodb 通过_id node-mongodb-native 选择文档

javascript 来自http://mongodb.github.io/node-mongodb-native/3.1/quick-start/quick-start/