在 mongodb 終端環境下寫多行 javascript 代碼、函數

來源:互聯網
上載者:User

標籤:margin   row   系統   檢查   欄位   vim 編輯器   next   blog   als   

工作中碰到一個問題,需要把某個 collection 中的某些合格資料取出來,逐行處理其中某些欄位。mongodb 終端下支援直接寫 js 代碼、函數,也可以運行 js 檔案。
1 首先需要設定 mongo 終端的代碼編輯器,不設定的話只能輸入一行代碼檔案,無法處理大段 js 邏輯
  進入 mongo 終端後,輸入

f={}

  斷行符號後,繼續輸入:

edit f

  未設定過相關係統變數的會收到如下提示:

please define EDITOR as a JavaScript string or as an environment variable

  我們可以輸入以下語句,設定 EDITOR:

EDITOR="/usr/bin/vim"

  這樣就臨時設定了 vim 編輯器作為後續的 js 代碼編輯器。此為臨時方法,關閉mongo 後再次使用就必須再次設定。可以試著將 EDITOR="/usr/bin/vim" 加入到系統內容變數中,我暫時沒嘗試。。。

2 寫 js 代碼:設定好編輯器後,終端輸入:

tempFunc = {}

  斷行符號後繼續輸入:

edit tempFunc

  就會進入到剛剛設定的編輯器環境,我這裡是 vim 環境。注意:vim 中輸入的所有內容,會被替換成 “tempFunc = “ 中等號的右部分。所以如果不是只想編輯一行代碼的話,最好是在 vim 中編輯成一個函數,確保替換後會變成 tempFunc = function(){…} 的形式。我在 vim 中編輯的完整內容如下:

 

  注意:

    一定要仔細檢查文法,如果不小心打錯了字,調用時候是沒有效果的,也沒有辦法再次編輯,只能從頭再編輯一遍!!!

 

  編輯好以後 wq 退出 vim,到此我們就完整定義了一個 tempFunc 函數。

  在終端中輸入函數調用:
    tempFunc()

  mongo 會把 entities 表中所有 grade<2 的資料取出來,然後對 grade +1,再寫回資料庫。

  

 註:

  1:這裡 update語句 寫的有一個問題:原來的 grade 如果是 int32 類型,寫入後會變成 double 類型。包括使用 inc、dec 之類的操作,都會把 int32 類型的資料覆寫成 double 類型。用 NumberInt 函數就可以解決
  可以把 update 語句改成這樣:
    db.entities.update({_id:rowData["_id"]}, {$set:{grade:NumberInt(newGrade)}}, {multi:false});

  2:盡量定義成一個函數體,方便外界整體調用。如果不想定義成一個函數,可以一開始的時候直接 輸入 edit{}, 然後再 vim 中刪掉預設保留的{},就可以寫一行行的 js 代碼了,最後退出 vim 的時候會壓縮成一行代碼,類似於這種,然後按斷行符號就直接執行了:

var cursor = db.entities.find(); while(cursor.hasNext()){ var row = cursor.next(); print(row["grade"]); }

 

 

在 mongodb 終端環境下寫多行 javascript 代碼、函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.