您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關MongoDBRuby中如何嵌入Javascript,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
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類對象的類型與狀態得到對其的數量統計信息。另外最好能夠按照當前的狀態進行具有針對性的統計分析。
一種方法是使用Mongo內置的map-reduce。Mongoid擴展了該功能,讓程序員可以使用Ruby程序實現其所需的內聯Javascript函數(mapper和reducer)。讀者可能覺得這種方法并不好,不過似乎這是目前最好的方法了。有很多更復雜的函數將這些Javascript函數分別寫到不同的文件中,這樣做也許更便于測試,但讀者如果自行測試整個工作中這項工作的輸入/輸出,就會發現其性能并不好。
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就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。