社区首页 >问答首页 >MongoDB --如何使用MapReduce将一个集合中的值合并到另一个集合中,在第二个集合的多个键上进行合并?

MongoDB --如何使用MapReduce将一个集合中的值合并到另一个集合中,在第二个集合的多个键上进行合并?
EN

Stack Overflow用户
提问于 2014-07-24 06:19:43
回答 1查看 218关注 0票数 0

我有两个MongoDB集合:第一个集合包含不同ID的频率信息,如下所示(截断形式):

代码语言:javascript
代码运行次数:0
复制
[
    {
        "_id" : "A1",
        "value" : 19
    },
    {
        "_id" : "A2",
        "value" : 6
    },
    {
        "_id" : "A3",
        "value" : 12
    },
    {
        "_id" : "A4",
        "value" : 8
    },
    {
        "_id" : "A5",
        "value" : 4
    },
    ...
]

第二个集合更复杂,包含第一个集合中列出的每个_id的信息(在第二个集合中称为frequency_collection_id ),但是frequency_collection_id可能位于每个记录的两个列表(info.details_oneinfo.details_two)中:

代码语言:javascript
代码运行次数:0
复制
[
    {
        "_id" : ObjectId("53cfc1d086763c43723abb07"),
        "info" : {
            "status" : "pass",
            "details_one" : [ 
                {
                    "frequency_collection_id" : "A1",
                    "name" : "A1_object_name",
                    "class" : "known"
                }, 
                {
                    "frequency_collection_id" : "A2",
                    "name" : "A2_object_name",
                    "class" : "unknown"
                }
            ],
            "details_two" : [ 
                {
                    "frequency_collection_id" : "A1",
                    "name" : "A1_object_name",
                    "class" : "known"
                }, 
                {
                    "frequency_collection_id" : "A2",
                    "name" : "A2_object_name",
                    "class" : "unknown"
                }
            ],
        }
    }
    ...
]

我想要做的是将频率信息(从第一个集合)合并到第二个集合中,实际上创建一个如下所示的集合:

代码语言:javascript
代码运行次数:0
复制
[
    {
        "_id" : ObjectId("53cfc1d086763c43723abb07"),
        "info" : {
            "status" : "pass",
            "details_one" : [ 
                {
                    "frequency_collection_id" : "A1",
                    "name" : "A1_object_name",
                    "class" : "known",
                    **"value" : 19**
                }, 
                {
                    "frequency_collection_id" : "A2",
                    "name" : "A2_object_name",
                    "class" : "unknown",
                    **"value" : 6**
                }
            ],
            "details_two" : [ 
                {
                    "frequency_collection_id" : "A1",
                    "name" : "A1_object_name",
                    "class" : "known",
                    **"value" : 19**
                }, 
                {
                    "frequency_collection_id" : "A2",
                    "name" : "A2_object_name",
                    "class" : "unknown",
                    **"value" : 6**
                }
            ],
        }
    }
    ...
]

我知道这在MongoDB的MapReduce函数中是可能的,但是我看到的所有示例对于我的集合结构来说都太小了,或者回答的问题与我想要的不同。

有人有指针吗?如何将频率信息(来自第一个集合)合并到记录中(在第二个集合的每个记录中的两个列表中)?

我知道这或多或少是一个JOINMongoDB不支持它,但从我的阅读来看,这似乎是MapReduce的一个主要示例。

我正在尽我所能地学习蒙戈,所以如果我的问题太天真,请原谅我。

EN

回答 1

Stack Overflow用户

发布于 2014-07-24 07:02:48

就像所有的MongoDB操作一样,MapReduce总是只在一个集合上运行,不能从另一个集合中获取信息。因此,第一步需要将两个集合转储到一个集合中。您的文档有不同的_id,因此它们在同一个集合中共存不应该是一个问题。

然后执行一个MapReduce,其中映射函数emit为它们的公共key提供两种文档,这是它们的频率ID。

然后,您的reduce函数将为每个键接收一个由两个文档组成的数组:您已经收到的两个文档。然后,您只需将这两个文档合并为一个。请记住,减缩函数可以以任何顺序接收这两个文档。也可能发生调用部分结果(两个文档中只有一个)或已经完成的结果的情况。你需要优雅地处理这些案件!一个很好的实现可以是创建一个新的对象,然后迭代输入文档,将所有现有的相关字段及其值复制到新对象,因此产生的对象是输入文档的合并。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24936272

复制
相关文章
Linux在windows上共享目录
一、linux安装samba yum -y install samba 二、备份配置文件 cp /etc/samba/smb.conf /etc/samba/smb.conf.backup 三、添加访
静谧星空TEL
2021/04/27
4.4K0
Linux在windows上共享目录
在Windows系统上的Linux容器
ghplvh
2018/01/09
4.9K0
在 Linux or windows 上后台运行服务
  此时可以访问 http://ip:8000 验证服务是否成功启动了(详细操作见另一篇文章-Python 一行搭建文件服务器)
我是胖虎啊
2022/06/27
3.2K0
在 Linux or windows 上后台运行服务
在Windows上搭建Go开发环境
在Windows上搭建Go开发环境
乐百川
2018/01/09
1.5K0
在Windows上搭建Go开发环境
BML CodeLab重磅更新:在Windows上可原生Linux AI开发
自从微软发布 WSL2(Windows Subsystem for Linux 2)之后,机器学习开发者、数据科学家就可以在 Windows 上做原生 Linux 开发了。
用户1386409
2021/03/09
1.2K0
BML CodeLab重磅更新:在Windows上可原生Linux AI开发
Linux的GUI程序在Windows上使用
一,在linux机上安装xorg-x11-xauth 如果没装,启动GUI程序会提示Canno open display。 方法: yum install xorg-x11-xauth 二、打开linux服务器的sshd的X11转发功能: vi /etc/ssh/sshd_config 配置: X11Forwarding yes 三、在Windows客户端上安装X11 Server程序 Xming是运行于Windows下的X 服务器,下载Xming:http://sourceforge.net/pro
韩伟
2018/03/05
4.5K0
Linux的GUI程序在Windows上使用
快速在 Windows 上搭建 Jekyll 开发环境
发布于 2018-03-04 05:30 更新于 2018-08-12 06:50
walterlv
2018/09/18
1.1K0
快速在 Windows 上搭建 Jekyll 开发环境
在 Windows 上使用 Python 进行 web 开发
我们建议在生成 web 应用程序时在 WSL 上安装 Python。 Python web 开发的许多教程和说明都是针对 Linux 用户编写的, 并使用基于 Linux 的打包和安装工具。 大多数 web 应用还部署在 Linux 上, 因此, 这将确保你的开发环境与生产环境之间的一致性。
葡萄城控件
2019/08/03
6.9K0
Flutter在Windows上搭建Android开发环境
Flutter 是谷歌基于 Dart 语言开发的一款开源、 免费、跨平台的移动端UI 框架,可以让我们快速的在 Android 和iOS 上构建高质量 App,它最大的特点就是跨平台、 以及高性能。
越陌度阡
2020/12/16
1.5K0
Flutter在Windows上搭建Android开发环境
windows上开发linux程序完美环境搭建
然后启动安装centos即可,注意安装过程中,需要把网络配置固定IP,避免每次启动虚拟机IP飘走。
mingjie
2022/05/12
2.2K0
windows上开发linux程序完美环境搭建
怎样在Linux上开发vue项目
将node.js的node可执行可执行文件与npm链接所在目录添加到环境变量,在文件/etc/profile文件末尾添加以下内容
极客开发者
2022/01/18
2.1K0
怎样在Linux上开发vue项目
WampServer – 在 Windows 上轻松搭建 PHP 开发环境
WampServer 是一个 Windows 上的 Apache + PHP + MySQL 开发环境。作为一名 WordPress 主题开发者,我一直使用 WampServer 搭建本地 PHP 开发环境。 WampServer 的安装流程十分简单,一路 Next 就行。
慕白
2018/08/03
1.3K0
WampServer – 在 Windows 上轻松搭建 PHP 开发环境
Linux上搭建Git服务,客户端在Windows
服务器 CentOS Linux release 7.4.1708 (Core) + git(version 1.8.3.1) 客户端 Windows7 + git(Git-2.9.3.2-64-bit.exe)
飞狗
2018/12/18
3K0
如何使用Homebrew在Linux和Windows上安装软件
长期以来,Homebrew软件一直是Mac用户的便捷工具,但仅适用于Mac用户。 该应用程序增加了Linux风格的软件包管理,使用户可以轻松安装命令行实用程序。 现在,在2.0.0及更高版本中,该应用程序不再是Mac专有的。
用户8704998
2021/06/08
3.8K0
在Windows 10上安装TensorFlow及PyCharm开发环境[通俗易懂]
有时候在查看官方文档时,常常看到很多的分支,所以作为开发者我们都喜欢把最佳实践总结出来。下面一起来看看如何在Windows 10上安装一个TensorFlow和PyCharm开发环境。
全栈程序员站长
2022/09/27
1.6K0
在Windows 10上安装TensorFlow及PyCharm开发环境[通俗易懂]
在 Windows 上安装 Composer
(2) 选中PHP安装目录下的php.exe,PHP的安装路径在环境变量 Path 中,则会自动选中,否则需要手动选中
很酷的站长
2023/02/17
2.1K0
在 Windows 上安装 Composer
MongoDB - 在Windows上安装
1 下载MongoDB社区版, 下载链接 http://www.mongodb.org/downloads?_ga=1.129742796.1997610832.1481940266 2 安装Mong
我思故我在
2018/05/11
2.3K0
在Windows上安装Jenkins
apache-tomcat/bin目录下的startup.bat在windows上启动。
清菡
2020/12/02
2.4K0
在Windows上安装Jenkins
在 Windows 玩 Linux!
之前了解过一些适用于linux的Windows子系统,最近又听人提起,于是在自己的Windows 10专业版上安装了一个Ubuntu。运行起来还真方便,以后在windows上开发Linux程序就不需要安装桌面虚拟化应用了。下面讲下具体的步骤。
Rookie
2020/04/23
4.2K0
在 Windows 玩 Linux!
怒删虚拟机,FPGA开发新宠-几步在Windows上安装桌面化Linux
Linux上运行Vivado这类EDA工具要比Window上快很多,大概就是优化的问题,所以选择Linux上开发是一个比较好的选择(主要是免费)。国内习惯了Win系统,所以用Linux比较少,那么有没有既可以在Windows上做一些文档之类的编写办公,同时在Linux上做FPGA开发呢?
碎碎思
2023/02/14
2.1K0
怒删虚拟机,FPGA开发新宠-几步在Windows上安装桌面化Linux

相似问题

如何在gatling模拟中运行多个空手道特征文件?

126

如何在Python中将参数传递给类?

11

如何在Gatling脚本中将变量传递给.get方法

10

如何在laravel中将数组传递给特征?

16

如何在Gatling中将地图列表传递给pebble模板?

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文