当前位置: 首页 > 面试题库 >

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

岳风畔
2023-03-14
问题内容

我的数据库中有大量的文档,我想知道如何浏览所有文档并更新它们,每个文档具有不同的值。


问题答案:

答案取决于您使用的驱动程序。我所知道的所有MongoDB驱动程序都以cursor.forEach()一种或另一种方式实现。

这里有些例子:

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) {
  // code 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();
  }
}


 类似资料:
  • 问题内容: 我一直在尝试发现如何将MongoDB与Node.js一起使用,并且在文档中似乎建议的方法是使用回调。现在,我知道这只是一个优先事项,但我真的更喜欢使用诺言。 问题是我没有找到如何在MongoDB中使用它们。确实,我已经尝试了以下方法: 结果是。在那种情况下,看来这不是这样做的方法。 有什么方法可以在Node内部使用带有promise而不是回调的mongo db吗? 问题答案: 您的方法

  • 我正在处理一个节点。js服务器,连接到MongoDB,用TypeScript编写。当我尝试使用MongoDB时,它不会创建连接,但是当我检查mongo输出时,它似乎确实创建了连接。 在节点中定义连接的代码中缺少了什么。js? 我的连接字符串是 我的连接方式: Mongo输出: 2018-11-08T23:06:24.106 0100网络[监听器]连接从127.0.0.1:51345#11接受(2个

  • 问题内容: 我将MongoDB与本机节点驱动程序一起使用,需要准确存储可能大于int最大值2147483647的数字。在跟踪使用情况时,我将需要能够增加数字。我有什么选择? 我正在用猫鼬。我遇到的问题是,当我过去2147483647时,它会将数字转换为双精度。如何强制Mongoose使用64位long int ? 我的架构如下所示 我的样子是这样 问题答案: 您现在可以使用该插件在Mongoose

  • 问题内容: 好的,所以我已经安装了Flask,我想知道如何将MongoDB数据库与即将开始构建的Flask应用程序连接和使用。 问题答案: 我个人发现PyMongo库简单易用。 你首先需要导入并创建一个连接: 然后获取你的数据库实例和集合(表): 然后,你可以通过处理保存数据的JSON文档来操纵数据。他们的网站上有完整的示例。

  • 问题内容: 我遍历了许多博客和网站,了解如何配置Elasticsearch for MongoDB来索引MongoDB中的集合,但是它们都不是直接的。 请向我说明逐步安装Elasticsearch的过程,其中应包括: 组态 在浏览器中运行 我将Node.js与express.js结合使用,因此请相应地提供帮助。 问题答案: 这个答案应该足以使您开始按照本教程使用MongoDB,Elasticsea

  • 在NodeJS项目中使用Bazel最简单的方法是什么,有些项目可能是用其他语言编写的?另外,是否有一个例子在某处Bazel被用于多回购设置? 谢了!