如何在shell下使用JavaScript和Mongodb互動?__shell

來源:互聯網
上載者:User
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({})
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.