這篇文章將為大家詳細講解有關MongoDBRuby中如何嵌入Javascript,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
網站建設哪家好,找創(chuàng)新互聯!專注于網頁設計、網站建設、微信開發(fā)、小程序定制開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯還提供了興隆臺免費建站歡迎大家使用!
MongoDBRuby中怎樣嵌入Javascript
class Publication
include Mongoid::Document
field :name, :type => String
field :section, :type => String
field :body, :type => String
field :is_published, :type => Boolean
end
class LongerPublication
field :extra_body, :type => String
end
此時系統中已經存在一個Publication類和一個LongerPublication類。現在需要做一些信息匯總方面的工作,想通過Publication類對象的類型與狀態(tài)得到對其的數量統計信息。另外最好能夠按照當前的狀態(tài)進行具有針對性的統計分析。
一種方法是使用Mongo內置的map-reduce。Mongoid擴展了該功能,讓程序員可以使用Ruby程序實現其所需的內聯Javascript函數(mapper和reducer)。讀者可能覺得這種方法并不好,不過似乎這是目前最好的方法了。有很多更復雜的函數將這些Javascript函數分別寫到不同的文件中,這樣做也許更便于測試,但讀者如果自行測試整個工作中這項工作的輸入/輸出,就會發(fā)現其性能并不好。
MongoDBRuby中怎樣嵌入Javascript
KLASS ="this._type"
SECTION ="this.section"
def self.count_by(type)
map = < function() { function truthy(value) { return (value ==true) ?1 :0; } emit(#{type}, {type: #{type}, count:1, published: truthy(this.is_published)}) } EOF reduce = < function(key, values) { var count =0; published =0; values.forEach(function(doc) { count += parseInt(doc.count); published += parseInt(doc.published); type = doc.type }; return {type: type, count: count, published: published} } EOF collection.mapreduce(map, reduce).find() end 在進行實驗測試時會返回類似如下代碼所示的數據;不過有些讀者在實驗時也有可能返回Mongo::Cursor,通過Mongo::Cursor可以獲取到以下數據。 [{"_id"=>"Publication","value"=>{"type"=>"Publication","count"=>42.0,"published"=>29.0}},
{"_id"=>"LongerPublication", "value"=>{"type"=>"LongerPublication", "count"=>12.0, "published"=>10.0}}]
Mongo與Mongoid使我非常喜歡這種信息匯總時的mapreduce工作,特別是將Ruby與Javascript這兩種編程語言混合在一起編寫,并沒有影響到代碼的可讀性。而如果給定一個關系數據庫,用戶有可能寫出各種各樣千奇百怪的SQL語句——因為與其他任意語言和SQL之間的語法差異相比,Javascript和Ruby之間的語法差異都要小得多。
關于MongoDBRuby中如何嵌入Javascript就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享文章:MongoDBRuby中如何嵌入Javascript
文章起源:http://jinyejixie.com/article28/pspejp.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站維護、外貿網站建設、商城網站、移動網站建設、營銷型網站建設、全網營銷推廣
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯