栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Node.js在MongoDB中使用cursor.forEach()?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Node.js在MongoDB中使用cursor.forEach()?

答案取决于您使用的驱动程序。我所知道的所有MongoDB驱动程序都以

cursor.forEach()
一种或另一种方式实现。

这里有些例子:

node-mongodb-native

collection.find(query).forEach(function(doc) {  // handle}, function(err) {  // done or error});

mongojs

db.collection.find(query).forEach(function(err, doc) {  // handle});

collection.find(query, { stream: true })  .each(function(doc){    // handle doc  })  .error(function(err){    // handle error  })  .success(function(){    // final callback  });

猫鼬

collection.find(query).stream()  .on('data', function(doc){    // handle doc  })  .on('error', function(err){    // handle error  })  .on('end', function(){    // final callback  });

.forEach
回调内部更新文档

.forEach
回调内部更新文档的唯一问题是您不知道何时更新所有文档。

要解决此问题,您应该使用一些异步控制流解决方案。以下是一些选项:

  • 异步的
  • 承诺(when.js,bluebird)

这是一个使用

async
,使用其
queue
功能的示例:

var q = async.queue(function (doc, callback) {  // pre for your update  collection.update({    _id: doc._id  }, {    $set: {hi: 'there'}  }, {    w: 1  }, callback);}, Infinity);var cursor = collection.find(query);cursor.each(function(err, doc) {  if (err) throw err;  if (doc) q.push(doc); // dispatching doc to async.queue});q.drain = function() {  if (cursor.isClosed()) {    console.log('all items have been processed');    db.close();  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号