MongoDB文档对象字段属性合并的2种转换方法

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 现在,对MongoDB中文档对象冗余数据有中业务要求,就是对同种属性的字段进行合并成一个集合,效果如下图所示: 实现上述数据转换有2中方法:一种是基于NoSQL语言的实现方式,一种是基于kettle的业务数据转换。

现在,对MongoDB中文档对象冗余数据有中业务要求,就是对同种属性的字段进行合并成一个集合,效果如下图所示:


实现上述数据转换有2中方法:一种是基于NoSQL语言的实现方式,一种是基于kettle的业务数据转换。

1、基于NoSQL语言的实现方式

首先,在MongoDB里准备一个文档数据:

[mongo@mongo ~]$ mongo

MongoDB shell version: 3.2.7

connecting to: test

> show dbs

local  0.000GB

zhul   0.151GB

> use datatrans

switched to db datatrans

> db.datatrans.insert({"username":"hanlingsha","gender":"girl","age":17,"TEL1":18811223298,"TEL2":18581418158,"TEL3":15286856439});

WriteResult({ "nInserted" : 1 })

> db.datatrans.findOne({"username":"hanlingsha"});

{

         "_id" : ObjectId("5760ad43742ee65d9552e757"),

         "username" : "hanlingsha",

         "gender" : "girl",

         "age" : 17,

         "TEL1" : 18811223298,

         "TEL2" : 18581418158,

         "TEL3" : 15286856439

}

>

         使用NoSQL语句实现文档元素合并的数据转换:

> var hls= db.datatrans.findOne({"username":"hanlingsha"});

> hls.username=hls.username;

hanlingsha

> hls.gender=hls.gender;

girl

> hls.age=hls.age;

17

> hls.TEL=[hls.TEL1,hls.TEL2,hls.TEL3];

[ 18811223298, 18581418158, 15286856439 ]

> delete hls.TEL1;

true

> delete hls.TEL2;

true

> delete hls.TEL3;

True

> db.datatrans.update({"username":"hanlingsha"},hls);

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.datatrans.findOne({"username":"hanlingsha"});

{

         "_id" : ObjectId("5760b2d8a1eb8f1a472e6980"),

         "username" : "hanlingsha",

         "gender" : "girl",

         "age" : 17,

         "TEL" : [

                   18811223298,

                   18581418158,

                   15286856439

         ]

}

>

         这里示例的是单个文档的转换,如果要转换多个文档,可以采用for循环;下边示例是使用kettle工具实现文档属性字段合并的数据转换:

先使用MongoChref连接上MongoDB


现在,我们从datatrans集合往dataresult集合抽取数据,并实现数据转换:

转换输入连接设置


转换输入源设置


输入源设置完成后可以点击预览查看要抽取的原始数据

 

调整输入源的fileds字段域设置获取源文档的字段域


整理编辑要选择的字段域,删除_id,因为输入步骤中会自动生成_id


输入的连接设置


输入的数据库及集合选择设置


输入前的转换设置


点击执行转换任务


切换到MongChref查看转换结果:


顺利完成,另外,kettle可以实现多文档转换,还能并行^_^

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
NoSQL MongoDB 数据库
MongoDB 更新文档
10月更文挑战第14天
68 2
|
3月前
|
存储 NoSQL MongoDB
数据的存储--MongoDB文档存储(二)
数据的存储--MongoDB文档存储(二)
96 2
|
12天前
|
存储 监控 NoSQL
【赵渝强老师】MongoDB文档级别的并发控制
MongoDB使用WiredTiger存储引擎在文档级别进行并发控制,允许多个写操作同时修改不同文档,但对同一文档的修改需序列化执行。引擎采用乐观锁和意向锁机制处理冲突。通过视频讲解、插入大量文档示例及使用`mongotop`和`db.serverStatus()`命令,演示了如何监控MongoDB的锁信息和读写统计,展示了数据库和集合级别的写锁情况。
54 29
|
7月前
|
NoSQL MongoDB 数据库
MongoDB 分页神器:limit() 和 skip() 方法详解
MongoDB 分页神器:limit() 和 skip() 方法详解
138 1
|
3月前
|
NoSQL Java MongoDB
MongoDB Limit 与 Skip 方法
10月更文挑战第16天
45 3
|
3月前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
46 1
|
3月前
|
存储 NoSQL 关系型数据库
数据的存储--MongoDB文档存储(一)
数据的存储--MongoDB文档存储(一)
130 3
|
3月前
|
NoSQL MongoDB
MongoDB 删除文档
10月更文挑战第15天
57 0
|
3月前
|
存储 JSON NoSQL
MongoDB 插入文档
10月更文挑战第14天
47 0
|
4月前
|
SQL NoSQL Shell
03 MongoDB文档的各种增加、更新、删除操作总结
文章总结了MongoDB中文档的增删改操作,包括插入文档、更新现有文档以及删除文档的具体方法和示例。
161 0