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可以实现多文档转换,还能并行^_^

目录
相关文章
|
8月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` > `skip()` > `limit()`。
319 1
|
8月前
|
JSON NoSQL MongoDB
微服务——MongoDB常用命令——文档基本CRUD
本文介绍了MongoDB中文档的基本操作,包括插入、查询、更新和删除。单个文档插入使用`insert()`或`save()`方法,批量插入用`insertMany()`。查询所有文档用`find()`,条件查询可在`find()`中添加参数,投影查询控制返回字段。更新文档通过`update()`实现,支持覆盖修改、局部修改(使用`$set`)和批量修改。列值增长可用`$inc`实现。删除文档用`remove()`,需谨慎操作以免误删数据。此外,文档键值对有序,区分大小写,不能有重复键。
192 1
|
NoSQL MongoDB 数据库
MongoDB 更新文档
10月更文挑战第14天
270 2
|
存储 NoSQL MongoDB
数据的存储--MongoDB文档存储(二)
数据的存储--MongoDB文档存储(二)
293 2
|
10月前
|
存储 监控 NoSQL
【赵渝强老师】MongoDB文档级别的并发控制
MongoDB使用WiredTiger存储引擎在文档级别进行并发控制,允许多个写操作同时修改不同文档,但对同一文档的修改需序列化执行。引擎采用乐观锁和意向锁机制处理冲突。通过视频讲解、插入大量文档示例及使用`mongotop`和`db.serverStatus()`命令,演示了如何监控MongoDB的锁信息和读写统计,展示了数据库和集合级别的写锁情况。
270 29
|
NoSQL MongoDB 数据库
MongoDB 分页神器:limit() 和 skip() 方法详解
MongoDB 分页神器:limit() 和 skip() 方法详解
317 1
|
NoSQL Java MongoDB
MongoDB Limit 与 Skip 方法
10月更文挑战第16天
180 3
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
429 1
|
存储 NoSQL 关系型数据库
数据的存储--MongoDB文档存储(一)
数据的存储--MongoDB文档存储(一)
594 3
|
NoSQL MongoDB
MongoDB 删除文档
10月更文挑战第15天
259 0

推荐镜像

更多