写给MongoDB开发者的50条建议Tip11
本系列文章翻譯自《50 Tips and Tricks for MongoDB Developers》,暫時沒有找到中文版,反正自己最近也在深入學習mongodb,所以正好拿來翻譯一下。一方面加強自己學習的效果,另一方面讓大 家也一起來體驗一下需要我們這些mongodb使用者需要注意的地方。
首先聲明自己的英文水平不是太高,加之有些英文翻譯成中文也找不到合適的詞來表達,所以在文章中可能會出現英文原詞,或者說有些地方的翻譯會有些生 硬,也就是說會出現直譯的地方。翻譯該書的主要目的是為大家學習探討用的,如果有翻譯不精準的地方,或者說有更加精準的翻譯,還請大家指出,我會及時的更 正的,在此先謝過各位了。
Tip11.Prefer $-operators to JavaScript
使用$操作符,而不是用javascript
對于大多數應用,設計一個自包含的文檔,可以將查詢的復雜性降到最低。但是,有的時候你需要查詢的內容用$操作符沒有辦法做到。這時候,可以使用javascript。你可以使用$where,在查詢中執行任意的javascript代碼。
為了使用$where,你需要寫一個javascript函數,返回值是true或者false。假設你需要返回member[0].value等于member[1].value的記錄,你可以這么做。
只要你想到的,$where可以賦予你的查詢更強的能力。
$where需要花費很長的時間,因為mongodb需要在幕后做很多工作。當你執行一個正常的(非$where)查詢,客戶端把查詢轉換成BSON,然后發送給數據庫。mongodb存儲數據也是用BSON,因此可以用條件進行基本的比較。這非常快,而且高效。
現在假設在查詢時候需要使用$where。mongodb必須為集合中的每一個文檔創建一個javascript對象,解析文檔的BSON,然后將字段賦值到javascript對象中。然后執行你發送過去的javascript代碼,進行比較,然后再拆解這些對象。這相當耗時,而且需要很多資源。
$where在必要的時候是一個好的選擇,但是要避免任何時候都是用。事實上,如果在查詢中發現很多$where,這時候就需要重新考慮你的文檔結構了。
如果非要使用$where,你可以想一些辦法,減少使用$where的文檔數量。先用條件過濾,然后對過濾后的文檔使用$where,$where就不會花很長時間了。
例如,我們在上面的場景使用$where,我們需要檢查member的age,我們只需要檢查相關的成員和家庭成員。
?
?
現在,所有非joint和family的member就不用花時間執行$where了。
?
本文轉自 virusswb 51CTO博客,原文鏈接:http://blog.51cto.com/virusswb/799456,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的写给MongoDB开发者的50条建议Tip11的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux启动系统不显示进度条设置方法
- 下一篇: 百度地图怎么添加自己的店铺位置(登录百度