Mongodb的用戶端支援
作為一款非常成熟NoSQL資料庫,Mongdb對各種程式設計語言的支援已經非常完善了,目前已經支援各大主流程式設計語言包括:
1,mongo shell
2,python
3,java
4,c#
5,node.js
6,c++
在這些語言裡面,最簡單,最輕巧的就莫屬mongo shell了,無須任何其他的依賴環境,只需要一個mongo用戶端,就可以串連本地的,遠端各個mongo庫了,這非常像各個資料庫的介面工具,如Navicat,Sql Plus等, 互動式能力非常強,想要什麼資料,很快就能直接查出來,當然想要運用的更靈活,肯定是嵌入到程式設計語言裡面了。 Mongodb包結構介紹 1,mongo核心指令碼進程
mongo ->mongo的互動式shell
mongod -> 資料庫進程
mongos -> 查詢路由控制器
2,二進位匯入匯出工具
mongodump ->建立bson檔案匯出來自mongod執行個體
mongorestore ->恢複上面匯出的備份檔案
bsondump ->轉換bson檔案成json檔案
mongooplog ->記錄一些正常副本的流式log 3,文本匯入匯出工具
mongoimport -> 匯入來自csv,json,tsv的資料
mongoexport -> 匯出mongo資料到csv,json,tsv格式的檔案裡 4,診斷工具
mongostat ->能夠查看當前運行執行個體的副本,執行個體,集合,coll狀態
mongotop -> 能夠查看當前執行個體的讀寫比例和花費時間
mongosniff ->提供一個近即時的資料狀態跟蹤明細
mongoperf ->能夠查看當前執行個體磁碟IO的效能 如何以js方式操作mongo表資料。
假如我們現在有一個需求,讀取某個mongo庫的一個表,然後清洗相關欄位,再輸入到一個本地檔案裡面,如何用js完成,封裝的邏輯。
定義的js如下:
//查詢一個表執行個體所有資料,得到一個遊標var cursor=db.collection1.table1.find();cursor.forEach( function(doc) { var split="\1";//分隔字元 var anyCpyNo=doc.anyCpyNo+"";//主鍵 var cpyName=doc.cpyName+"";//企業名稱 var logoUrl=doc.cpyOtherResource+""!='undefined'?doc.cpyOtherResource.logoUrl:"";//圖片的url var provinceCode=doc.provinceCode+"";//省份編碼 var cityCode=doc.cityCode+"";//城市編碼 var modifyTime=new Date(doc.modifyTime).getTime();//更新時間 var cpyNatureCode=doc.cpyNatureCode+"";//企業性質+雙引號,轉成字串 var cplen=cpyNatureCode.length if(cpyNatureCode!='undefined'&& cplen > 2 ){ cpyNatureCode=cpyNatureCode+"#"+cpyNatureCode.substr(0,2)+"00"; } var foundDate=new Date(doc.foundDate).getTime();//成立時間 var subIndustryCode=doc.subIndustryCode;//行業標準 if(subIndustryCode!='undefined' && subIndustryCode+"".length > 2){ subIndustryCode=subIndustryCode.substr(0,2)+"00"; } var legalPerson=doc.legalPerson;//法定代表人 if(legalPerson==='undefined'){ legalPerson=doc.manager; } var loc=doc.location+""//地址 if(loc==='undefined'){ loc=doc.businessPlace; } var regCode=doc.regCode+"";//工商註冊號 var orgCode=doc.orgCode+"";//組織機構代碼 var regCapital=doc.regCapital+""!='undefined'?doc.regCapital.amount+""!='undefined'?doc.regCapital.amount:"":"";//註冊資金 var taxRegCode=doc.taxRegCode+"";//稅務登記號碼 var r=anyCpyNo//主鍵 +split+cpyName//公司名 +split+logoUrl//圖片url +split+provinceCode//省份編碼 +split+cityCode//城市編碼 +split+modifyTime//更新時間 +split+cpyNatureCode//企業性質 +split+foundDate//成立時間 +split+subIndustryCode//二級行業標準的頂級類目 +split+legalPerson//法定代表人 +split+loc//地址 +split+regCode//工商註冊號 +split+orgCode//組織機構代碼 +split+regCapital//註冊資金 +split+taxRegCode;//稅務登記號碼 r=r.replace(/\r/gi, "");//Js正則去掉換行字元 r=r.replace(/\n/gi, "");//Js正則去掉換行字元 r=r.replace(/undefined/gi,"");//Js正則去掉未定義的語句 print(r);//輸入拼接的整行內容} );
如何在Centos中向mongos提交執行js。
mongo --quiet ip:host/dbname < test.js >> data//--quiet執行靜默模式,去掉系統列印資訊//ip mongo服務所在機的ip地址//host mogo服務對外提供的訪問連接埠//dbname 是指要連結的資料庫名字// test.js 是我們要執行的js檔案// data 是我們輸出的內容寫入data檔案裡面
一些Mongo的與SQL對應的動作陳述式
操作 SQ文法Mongodb文法建表CREATE TABLE users (id MEDIUM INT NOTNULL AUTO_INCREMENT,user_idVarchar(30),ageNumber,statuschar(1),PRIMARYKEY(id))db.users.insert({user_id:"abc123",age:55,status:"A"})users集合可以不存在,在插入第一條時會建立,當然也可以提前建立,執行語句:db.createCollection("users")新增欄位 ALTER TABLE users ADD join_date DATETIMEdb.users.update({},{$set:{join_date:newDate()}},{multi:true})刪除欄位ALTER TABLE users DROP COLUMN join_datedb.users.update({},{$unset:{join_date:""}},{multi:true})建立索引CREATE INDEX idx_user_id_asc ON users(user_id)db.users.createIndex({user_id:1})建立索引指定排序CREATE INDEX idx_user_id_asc_age_desc ON users(user_id,ageDESC)db.users.createIndex({user_id:1,age:-1})刪除一個表DROP TABLE usersdb.users.drop()插入資料INSERTINT Ousers (user_id,age,status) VALUES ("bcd001",45,"A")db.users.insert({user_id:"bcd001",age:45,status:"A"})查詢1SELECT * FROM usersdb.users.find()查詢2 SELECT id,user_id,status FROM usersdb.users.find({},{user_id:1,status:1})查詢3SELECT user_id,status FROM usersdb.users.find({},{user_id:1,status:1,_id:0})查詢4SELECT * FROM users WHERE status = "A"db.users.find({status:"A"})查詢5 SELECT user_id,status FROM users WHERE status = "A"db.users.find({status:"A"},{user_id:1,status:1,_id:0})查詢6SELECT * FROM users WHERE status != "A"db.users.find({status:{$ne:"A"}})查詢7SELECT * FROM users WHERE status="A" AND age=50db.users.find({status:"A",age:50})查詢8SELECT * FROM users WHERE status="A" OR age = 50db.users.find({$or:[{status:"A"},{age:50}]})查詢9SELECT * FROM users WHERE age > 25db.users.find( {age:{$gt:25}} )查詢10SELECT * FROM users WHERE age < 25db.users.find({age:{$lt:25}})查詢11SELECT * FROM users WHERE age > 25 AND age <= 50db.users.find({age:{$gt:25,$lte:50}})查詢12SELECT * FROM users WHERE user_id like "%bc%"db.users.find({user_id:/bc/})查詢13SELECT * FROM users WHERE user_id like "bc%"db.users.find({user_id:/^bc/})查詢14SELECT * FROM users WHERE status="A" ORDER BY user_id ASCdb.users.find({status:"A"}).sort({user_id:1})查詢15SELECT * FROM users WHERE status="A" ORDERBY user_id DESCdb.users.find({status:"A"}).sort({user_id:-1})查詢16SELECT COUNT(*) FROM usersdb.users.count() 或者db.users.find().count()查詢17SELECT COUNT (user_id) FROM usersdb.users.count({user_id:{$exists:true}})db.users.find({user_id:{$exists:true}}).count()查詢18SELECT COUNT(*) FROM users WHERE age>30db.users.count({age:{$gt:30}}) 或者db.users.find({age:{$gt:30}}).count()查詢19SELECTDISTINCT(status) FROMusersdb.users.distinct("status")查詢20SELECT * FROM users LIMIT 1db.users.findOne()db.users.find().limit(1)查詢21SELECT * FROM users LIMIT 5 , 10db.users.find().limit(5).skip(10)查詢22EXPLAIN SELECT * FROM users WHERE status="A"db.users.find({status:"A"}).explain()更新1UPDATE users SET status="C" WHERE age>25db.users.update({age:{$gt:25}},{$set:{status:"C"}},{multi:true})更新2 UPDATE users SET age=age+3 WHERE status="A"db.users.update({status:"A"},{$inc:{age:3}},{multi:true})刪除1DELETE FROM users WHERE status="D"db.users.remove({status:"D"})刪除2DELETE FROM usersdb.users.remove({})