最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mongodb eval 執(zhí)行服務(wù)器端腳本

 更新時間:2015年05月12日 10:47:05   投稿:hebedich  
在MongoDB的服務(wù)器端可以通過db.eval函數(shù)來執(zhí)行javascript腳本,如我們可以定義一個javascript函數(shù),然后通過db.eval在服務(wù)器端來運行!我們前面其實也接觸過在服務(wù)器段運行一個預(yù)定義的javascript腳本的情況,如在$where查詢,執(zhí)行mapreduce任務(wù)等。

在服務(wù)器端可以通過db.eval函數(shù)來執(zhí)行javascript腳本,也可以把javascript腳本保存在數(shù)據(jù)庫中,然后在別的數(shù)據(jù)庫命令中調(diào)用.

一、db.eval 執(zhí)行服務(wù)器端腳本

利用db.eval函數(shù)可以在MongoDB服務(wù)器端執(zhí)行javascript腳本.這個函數(shù)先將給定的javascript字符串傳遞給MongoDB服務(wù)器,在服務(wù)器上執(zhí)行,然后返回結(jié)果.
db.eval可以用來模擬多文檔事務(wù):db.eval鎖住數(shù)據(jù)庫,然后執(zhí)行javascript,再解鎖.雖然沒有內(nèi)置的回滾機制,但這能確保一系列操作按照指定的數(shù)序發(fā)生.
發(fā)送代碼有兩種方式,封裝一個函數(shù)或者不封裝,如:

復(fù)制代碼 代碼如下:

db.eval("return 'refactor';")
db.eval("function(){return 'refactor';}")

只有傳遞參數(shù)的時候,才必須要封裝成一個函數(shù).參數(shù)通過db.eval的第二個參數(shù)傳遞,要寫成一個數(shù)組的形式.
如:

復(fù)制代碼 代碼如下:

db.eval("function(name){return 'hello,'+name;}",['refactor'])

若db.eval的表達式要是復(fù)雜的話,調(diào)試的辦法是將調(diào)試信息寫進數(shù)據(jù)庫的日志中
如:

復(fù)制代碼 代碼如下:

db.eval("print('hello refactor')")

這樣在日志里就能找到hello refactor

二、存儲javascript

每個MongoDB的數(shù)據(jù)庫中都有個特殊的集合:system.js,用來存放javascript變量.這些變量可以在任何MongoDB的javascript上下文中調(diào)用,包括"$where"子句,db.eval調(diào)用,MapReduce作業(yè).用insert可以將變量存在system.js中
如:

復(fù)制代碼 代碼如下:

db.system.js.insert({"_id":"x","value":1})
db.system.js.insert({"_id":"y","value":2})
db.system.js.insert({"_id":"z","value":3})

上例在全局作用域中定義了x,y,z,對其求和:

db.eval("return x+y+z;")
 
system.js可以存放javascript代碼,這樣就可以很方便的自定義一些腳本,如用javascript寫一個日志函數(shù),將其存放在system.js中:

復(fù)制代碼 代碼如下:

db.system.js.insert(
  {
    "_id":"log",
    "value":function(msg,level)
        {
          var levels=["DEBUG","WARN","ERROR","PATAL"];
          level=level?level:0;
          var now= new Date();
          print( now +" "+ levels[level]+msg);
        }
  }
)

調(diào)用:

復(fù)制代碼 代碼如下:

db.eval("log('refactor bolg test',1)")

使用存儲的javascript缺點是代碼會與常規(guī)的源代碼控制脫離,會弄亂客戶端發(fā)送來的javascript.
最適合使用存儲javascript的情況就是程序中有個地方都要用到一個javascript函數(shù),這樣要是更新的話,只需更新這個函數(shù)而不必沒出都修改.要是javascript代碼很長又要繁瑣使用的話,也可以使用存儲javascript,這樣一次會節(jié)省不少傳輸時間.

三、安全性

執(zhí)行javascript代碼就要考慮MongoDB的安全性.
如:

復(fù)制代碼 代碼如下:

>func="function(){print('hello,"+username+"!');}"

如果username是用戶自定義的,可以使用這樣的字符串"');db.dropDatabase();print('",
代碼就變成了這樣:

復(fù)制代碼 代碼如下:

>func="function(){print('hello,');db.dropDatabase();print('!');}"

為了避免這種情況,要限定作用域.
絕大多數(shù)驅(qū)動程序都為傳遞給數(shù)據(jù)庫的代碼提供了一種特殊類型,這是因為代碼實際上可以看成是一個字符串和一個作用域的組合.作用域是一個保存著變量名和值映射關(guān)系的文檔.當(dāng)javascript函數(shù)執(zhí)行的時候,這種映射就構(gòu)成了函數(shù)的局部作用域.

相關(guān)文章

  • MongoDB最大連接數(shù)設(shè)置失效的異常分析過程與解決方法

    MongoDB最大連接數(shù)設(shè)置失效的異常分析過程與解決方法

    mongodb最大連接數(shù)是20000。所以業(yè)界流傳一段話,千萬級以下的用mysql、千萬級以上的用mongodb,億級以上的用hadoop。下面這篇文章主要給大家介紹了關(guān)于MongoDB最大連接數(shù)設(shè)置失效的異常分析過程,需要的朋友可以參考下
    2018-09-09
  • mongodb索引知識_動力節(jié)點Java學(xué)院整理

    mongodb索引知識_動力節(jié)點Java學(xué)院整理

    這篇文章給大家介紹了mongodb索引的建立,刪除索引的方法以及唯一索引和組合索引的知識,感興趣的朋友一起看看吧
    2017-08-08
  • MongoDB優(yōu)化心得分享

    MongoDB優(yōu)化心得分享

    本文給大家分享的是一些使用mongoDB優(yōu)化方面的心得,有需要的小伙伴可以參考下
    2017-12-12
  • 為MongoDB數(shù)據(jù)庫注冊windows服務(wù)

    為MongoDB數(shù)據(jù)庫注冊windows服務(wù)

    這篇文章介紹了為MongoDB數(shù)據(jù)庫注冊windows服務(wù)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MongoDB中的push操作詳解(將文檔插入到數(shù)組)

    MongoDB中的push操作詳解(將文檔插入到數(shù)組)

    $push操作符添加指定的值到數(shù)組中,下面這篇文章主要給大家介紹了關(guān)于MongoDB中push操作(將文檔插入到數(shù)組)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • MongoDB服務(wù)端JavaScript腳本使用方法

    MongoDB服務(wù)端JavaScript腳本使用方法

    這篇文章主要介紹了MongoDB服務(wù)端JavaScript腳本使用方法,需要的朋友可以參考下
    2015-10-10
  • MongoDB 3.4 安裝以 Windows 服務(wù)方式運行的詳細步驟

    MongoDB 3.4 安裝以 Windows 服務(wù)方式運行的詳細步驟

    這篇文章主要介紹了MongoDB 3.4 安裝以 Windows 服務(wù)方式運行的詳細步驟,需要的朋友可以參考下
    2017-09-09
  • Navicat Premium連接mongodb詳細教程

    Navicat Premium連接mongodb詳細教程

    這篇文章主要介紹了Navicat Premium連接mongodb詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • MongoDB日志文件過大的解決方法

    MongoDB日志文件過大的解決方法

    這篇文章主要介紹了MongoDB日志文件過大的解決方法,本文給出了一種不需要重啟MongoDB服務(wù)的方法重新開啟一個新日志文件,需要的朋友可以參考下
    2014-10-10
  • CentOS 7下用yum快速安裝MongoDB的方法教程

    CentOS 7下用yum快速安裝MongoDB的方法教程

    MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。本文介紹了CentOS 7系統(tǒng)下用yum快速安裝MongoDB的方法教程,文中通過一步步的步驟介紹的很詳細,有需要的朋友們可以參考借鑒。
    2016-12-12

最新評論

西峡县| 达日县| 民县| 安新县| 唐河县| 高邮市| 东兰县| 赣榆县| 肇州县| 五峰| 犍为县| 罗田县| 乐至县| 衡阳县| 松溪县| 天柱县| 双峰县| 平和县| 报价| 浦县| 忻州市| 丹江口市| 德州市| 健康| 浦江县| 新巴尔虎右旗| 宁都县| 富蕴县| 德惠市| 道孚县| 古田县| 东兰县| 南华县| 太和县| 齐河县| 西峡县| 兴山县| 临桂县| 府谷县| 阳城县| 莱阳市|