草庐IT

mongodb - MapReduce、MongoDB 和 node-mongodb-native

coder 2023-10-30 原文

我正在使用 node-mongodb-native 库在 MongoDB 上运行 MapReduce(来自 node.js)。

这是我的代码:

var map = function() {
        emit(this._id, {'count': this.count});
    };
var reduce = function(key, values) {
        return {'testing':1};
    };
collection.mapReduce(
    map,
    reduce,
    {
        query:{ '_id': /s.*/g },
        sort: {'count': -1},
        limit: 10,
        jsMode: true,
        verbose: false,
        out: { inline: 1 }
    },
    function(err, results) {
        logger.log(results);
    }
);

两个问题:

1) 基本上,我的 reduce 函数被忽略了。无论我放入什么,输出仍然只是我的 map 函数的结果(在这种情况下没有“测试”)。有什么想法吗?

2) 除非在用于排序的字段(在本例中为计数字段)上定义了索引,否则我会收到错误消息。我明白这是意料之中的。它似乎效率低下,因为正确的索引肯定是 (_id, count) 而不是 (count),因为理论上 _id 应该首先使用(用于查询),然后才应该将排序应用于适用的结果。我在这里错过了什么吗? MongoDB 效率低下吗?这是错误吗?

谢谢! :)

最佳答案

reduce 函数从未被调用的原因是因为您为每个键发出一个值,因此没有理由让 reduce 函数实际执行。这是一个如何触发 reduce 函数的例子

collection.insert([{group: 1, price:41}, {group: 1, price:22}, {group: 2, price:12}], {w:1}, function(err, r) {

// String functions
var map = function() {
        emit(this.group, this.price);
    };

var reduce = function(key, values) {
        return Array.sum(values);
    };

collection.mapReduce(
    map,
    reduce,
    {
        query:{},
        // sort: {'count': -1},
        // limit: 10,
        // jsMode: true,
        // verbose: false,
        out: { inline: 1 }
    },
    function(err, results) {
      console.log("----------- 0")
      console.dir(err)
      console.dir(results)
        // logger.log(results);
    }
);

请注意,我们按“组”键发出,这意味着有 n >= 0 个条目按“组”键分组。由于您发出 _id 每个键都是唯一的,因此不需要 reduce 函数。

http://docs.mongodb.org/manual/reference/command/mapReduce/#requirements-for-the-reduce-function

关于mongodb - MapReduce、MongoDB 和 node-mongodb-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644600/

有关mongodb - MapReduce、MongoDB 和 node-mongodb-native的更多相关文章

  1. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  2. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  3. ruby - Ruby 1.9.1 中的 native 线程,对我有什么好处? - 2

    所以,Ruby1.9.1现在是declaredstable.Rails应该与它一起工作,并且正在慢慢地将gem移植到它。它具有native线程和全局解释器锁(GIL)。自从GIL到位后,原生线程是否比1.9.1中的绿色线程有任何优势? 最佳答案 1.9中的线程是原生的,但它们被“放慢了速度”,一次只允许一个线程运行。这是因为如果线程真的并行运行,它会混淆现有代码。优点:IO现在在线程中是异步的。如果一个线程阻塞在IO上,那么另一个线程将继续执行直到IO完成。C扩展可以使用真正的线程。缺点:任何非线程安全的C扩展都可能存在使用Thre

  4. node.js - 如何在 Travis CI 上的一个项目中运行 Node.js 和 Ruby 测试 - 2

    我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每

  5. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

  6. ruby-on-rails - 安装 fcgi : Failed to build gem native extension 时出现 Rails 错误 - 2

    我正在运行命令bundleinstall在我的Rails项目中,它给出了错误:...Usingactiverecord(3.0.11)Usingactiveresource(3.0.11)Usingbigdecimal(1.1.0)Installingfcgi(0.8.8)withnativeextensionsGem::Installer::ExtensionBuildError:ERROR:Failedtobuildgemnativeextension./home/jjboat/.rvm/rubies/ruby-1.9.3-p194/bin/rubyextconf.rbchecki

  7. ruby - 错误 : Failed to build gem native extension on Windows - 2

    我在安装“redcarpet”gem时遇到以下错误。它在我friend的机器上安装没有问题。(我想安装它来运行yard)ruby版本:1.9.3命令输出:D:\Learning\Common_POM_FW\SampleProjects>yard[error]:Missing'redcarpet'gemforMarkdownformatting.Installitwith`geminstallredcarpet`D:\Learning\Common_POM_FW\SampleProjects>geminstallredcarpetTemporarilyenhancingPATHtoinc

  8. ruby-on-rails - ruby open ssl api for encrypted key (without nodes option) - 2

    在安装了openssllib的linux机器上,当您执行带有“-nodes”选项的“opensslpkcs12”时,您将获得带有未加密私钥的输出,但如果您跳过–nodes选项,则输出将具有加密的私钥。e.g.opensslpkcs12-intest.pfx-outtest.pem你应该看到像下面这样加密的私钥-----BEGINENCRYPTEDPRIVATEKEY-----MIIFDjBABgkqhkiGG7s=-----ENDENCRYPTEDPRIVATEKEY-----如何使用ruby​​的开放ssl库实现上述目标?这就是我用ruby​​生成私钥的方式:@private_key

  9. Rubyzip 与 native 操作系统压缩 - 2

    我想知道与使用native操作系统库执行压缩相比,使用ruby​​zip压缩数据时的性能差异是什么。我正在从URL获取要压缩的数据,然后使用ZipOutputStream创建zip文件。对于native操作系统实用程序,我正在考虑使用zip工具。很高兴听到这两种方法的优缺点。 最佳答案 事实证明,无论是运算时间还是CPU使用率,都没有太大差异。但是在内存使用方面存在显着差异。与使用ziputil相比,使用ruby​​zip的过程最终会使用更多的内存。在我们的用例中,内存使用是一个重要问题,因此我们最终使用了zip实用程序。

  10. node.js - 从未编写过任何自动化测试,我应该如何开始行为驱动开发? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易

随机推荐