因為最近測試MongoDB,也算是熟悉了MongoDB吧。MongoDB還算簡單,在短短一周我就掌握了很多內容。相對於其他資料庫這個確實容易多了。
我安裝的:
MongoDB版本為:2.0.8
系統為:64位Ubuntu 12.04
先給他家看一下我的表結構[Oh sorry, Mongo叫集合]
如你所見,我盡量的類比現實生活中的情境。這是一個人的實體,他有基本的manId, manName, 有朋友[myFriends],有喜歡的水果[fruits],而且每種水果都有喜歡的權重。
很不好的是你還看見了有個“_class”欄位? 因為我是Java開發人員, 我還喜歡用Spring,因此我選用了Spring Data Mongo的類庫[也算是架構吧,但是我不這麼覺得]。
現在有很多人Spring見的膩了也開始煩了。是的,Spring野心很大,他幾乎想要壟斷Java方面的任何事情。沒辦法我從使用Spring後就離不開他,以至於其他架構基本上都不用學。我學了Spring的很多,諸如:Spring Security/Spring Integration/Spring Batch等。。。不發明輪子的他已經提供了編程裡的很多情境,我利用那些情境解決了工作中的很多問題,也使我的工作變得很高效。從而我又時間學到它更多。Spring Data Mongo封裝了mongodb java driver,提供了和SpringJDBC/Template一致編程風格的MongoTemplate。
見:http://static.springsource.org/spring-data/data-mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoTemplate.html
不說廢話了,我們直接來MongoDB吧。
我和同事在測試Mongo時,索引還寫了不到一半,他想查詢某個欄位的最大值,結果找了半天文檔也沒找到關於max的函數。我也很納悶這是常規函數啊怎麼不提供? 後來經過翻閱資料確定Mongo確實不提供直接的max和min函數。但是可以通過間接的方式[sort 和 limit]實現這個。
要查詢最大值我們只需要把結果集按照降序排列,取第一個值就是了。
如我的例子,我想取得集合中年齡最大的人。
db.person.find({}).sort({"age" : -1}).limit(1)
相反如果想要年齡最小的人,只需要把sort中改為{“age”:1}就可以了。
當然我們使用了sort,對於小數量的文檔是沒問題的。當對於大量資料需要給age建立索引,否則這個操作很耗時。