ITPub博客

首页 > 数据库 > NoSQL > MongoDB文档对象字段属性合并的2种转换方法

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

原创 NoSQL 作者:清风艾艾 时间:2016-06-15 11:16:41 0 删除 编辑

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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29357786/viewspace-2120183/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
个人喜欢IT行业,目前从事数据库工作,包括Oracle、mysql、mongodb、sqlserver等数据库的维护,喜欢专研开发技术,尤其对java程序的开发感兴趣。工作经历上,在中国联通系统集成公司、中公网医疗信息技术有限公司做过数据库技术支持;目前在海量数据,负责华东区oracle、mysql、mongodb的维护工作。

注册时间:2015-01-30

  • 博文量
    251
  • 访问量
    544808