MongoDB文件物件欄位屬性合併的2種轉換方法
現在,對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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Scala的類、屬性、物件欄位物件
- Scala類的屬性以及物件私有欄位物件
- 合併陣列物件中相同的屬性值陣列物件
- lambda方法引用獲取欄位屬性
- c#之事件_方法_屬性_欄位C#事件
- C#通過反射獲取物件屬性,列印所有欄位屬性的值C#反射物件
- 理解物件以及物件的屬性、方法、事件 (轉)物件事件
- js訪問物件屬性的2個方法JS物件
- [.net 物件導向程式設計基礎] (10) 類的成員(欄位、屬性、方法)物件程式設計
- odoo欄位屬性列舉Odoo
- C#屬性與欄位C#
- js物件合併方法JS物件
- 共有的表單欄位屬性
- ms sql 獲取表欄位的屬性SQL
- 物件導向2--靜態方法、類方法、屬性方法物件
- c# 非靜態欄位、方法或屬性要求物件引用C#物件
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- IL角度理解C#中欄位,屬性與方法的區別C#
- 深入理解JavaScript類與物件:揭秘類欄位和靜態屬性的妙用,js靜態屬性和例項屬性JavaScript物件JS
- 資料處理之欄位合併
- mysql和mongodb替換欄位中某字元MySqlMongoDB字元
- mongodb用mongoose查庫的物件,不能增加屬性MongoDB物件
- 利用 alter 語句修改欄位屬性
- jackson根據屬性名動態序列化物件欄位物件
- 將Object物件轉換成Map 屬性名和值的形式Object物件
- python物件屬性管理(2):property管理屬性Python物件
- C#中的屬性和欄位的區別C#
- js 物件方法、類方法、原型方法的區別;私有屬性、公有屬性、公有靜態屬性的區別JS物件原型
- 3.2 - Laravel - 5.6 - Route - group屬性合併Laravel
- odoo ORM研究3 - odoo fields常用的欄位屬性OdooORM
- JS遍歷物件屬性的7種方式JS物件
- JavaScript訪問物件的屬性和方法JavaScript物件
- jQuery事件物件event的屬性和方法jQuery事件物件
- Array String物件的方法和屬性物件
- 使用 LinqDataSource 控制元件的 Select 屬性進行資料欄位的組合控制元件
- 合併JavaScript陣列的N種方法JavaScript陣列
- 裝備屬性欄位設計和投放詳解
- PG 資料庫查詢欄位屬性的指令碼資料庫指令碼