1. 程式人生 > >mongodb執行js指令碼(一)---shell執行

mongodb執行js指令碼(一)---shell執行

作為一個數據庫,MongoDB有一個很大的優勢—它使用js管理資料庫,所以也能夠使用js指令碼進行復雜的管理 mongodb 的shell是javascript實現的,如果直接使用js實現相應的功能則顯得很直觀和簡便。 比如我們對一些資料進行 統計計算,除了使用mapreduce之外,直接使用js也是很好的選擇。 還有一些批處理,資料同步都可以使用js

使用js指令碼進行互動的優點與缺點

(1)無需任何驅動或語言支援; (2)方便cron或管理員定時任務; (3)注意點:任然是資料格式的問題;

js指令碼一般會用來執行以下任務

(1)備份; (2)排程map-reduce命令;
(3)離線報告,離線任務; (4)管理員定時任務;

如何執行一個js指令碼

./mongo 127.0.0.1:3003/test –quiet test.js 說明: (1)./mongo mongo客戶端-_-; (2)127.0.0.1:3003/test 伺服器的ip,port,以及需要連線的資料庫; (3)–quiet 省略一些頭資訊 (4)test.js 待執行的指令碼,內容是: db.test.find().forEach(printjson); 也可以使用–eval引數 ./mongo 127.0.0.1:3003/test  –eval “db.test.find().forEach(printjson);”
–eval引數後面直接跟一個js語句。

其他的一些說明

(1)通常使用兩種方法列印獲取到的結果: print() => 普通js printjson() => 格式化json列印,打印出來的格式會漂亮許多 (2)迭代器(iterator command)在指令碼操作中將失效 (3)如何知道insert、delete、update等操作是否成功呢,請使用: db.getLastErrorObj() 或者 db.getLastError() (4)js shell的相關介紹見:

使用示例

我現在的mongodb資料庫有一個集合叫user,我通過js把給每個文件新增一個trueName欄位,並賦值等於userName。  再讓userName欄位 的值 後面加上 110.



新建js檔案

新建一個fn_add_truename_add110_to_username.js檔案 內容為:
  db.user.find().forEach(function(item){
      item.trueName=item.userName;
	  item.userName=item.userName+"110";
	  db.user.save(item);   
  } 
 )


傳送js到bin目錄

傳送到linux的mongodb安裝資料夾bin目錄下

執行js檔案

在linux系統中  進入mongodb安裝目錄bin目錄
cd  /usr/local/mongodb/mongodb-linux-x86_64-2.6.10/bin/
在bin目錄下執行命令
./mongo  127.0.0.1:27017/test  –quiet   fn_add_truename_add110_to_username.js


也可以進入mongo後 直接把js目錄複製貼上 回車執行:
["字串1","字串2"].forEach(function(item){print(item + '\t' + db.resultTxt.count({ "resultDetail.diseaseResult.highDiseaseResultDetails.name" : item }))})


檢視結果