Mongodb的mapreduce如何实现只更新现有表的部分字段,而不是整个文档
给我你的怀抱
给我你的怀抱 2017-04-24 15:59:55
[MongoDB讨论组]

MapRedue 的输出

{"out", option }

option可以是下面几个选项:

  • "collection name" – mapReduce的输出结果会替换掉原来的collection,collection不存在则创建
  • { replace : "collection name" } – 同上
  • { merge : "collection name" } – 将新老数据进行合并,新的替换旧的,没有的添加进去
  • { reduce : "collection name" } – 存在老数据时,在原来基础上加新数据(即 new value = old value + mapReduce value)
  • { inline : 1 } – 不会创建collection,结果保存在内存里,只限于结果小于16MB的情况
    如果用collection name作option不能与其它option一起使用,其它则可以,如:

    • { "out", { replace : "collection name", db : "db name" } }

merge选项的可能性最大,但是经过实验发现,它总是会根据“_id”更新整个文档,而不是只更新reduce或者finalize出来的对象里有的字段。

比如我一个已经存在的集合A,有10几个字段,没有emps字段,我运行一个MR操作,reduce出来的是{key,emps:[["0132",70],["1443",30]]},想把emps字段添加到现有的集合A上,结果我10几个字段都没有了,就只剩下emps字段了。
本来想在reduce里引用db对象手工update的,但是现在的版本都不让引用db对象了。
现在只能在mapreduce后,执行一个forEach,手工执行update。
请问mapreduce有没有相应的解决方案。

给我你的怀抱
给我你的怀抱

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号