MongoDB文件物件欄位屬性合併的2種轉換方法

清風艾艾發表於2016-06-15

現在,對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部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2120183/,如需轉載,請註明出處,否則將追究法律責任。

相關文章