《MongoDB管理与开发精要》——3.2节查询语法
3.2 查詢語法
MongoDB最大的特點是,它支持的查詢語言非常強大,其語法類似于面向對象的查詢語言,不但可以實現關系型數據庫查詢的大部分功能,而且還支持對數據建立索引。由于MongoDB可以支持非常復雜的數據結構,同時帶有強大的數據查詢功能,因此非常受歡迎,很多項目都考慮用MongoDB來替代MySQL等傳統數據庫來實現復雜的Web應用。很多案例都是因為數據量實在太大,所以遷移到MongoDB上,從而數據查詢的速度得到了非常顯著的提升。
3.2.1 數組內容的查詢
MongoDB本身支持數組類型的內嵌對象,接下來講解如何查詢數組中的特定內容。
數組內容的查詢方法跟普通查詢方法沒有區別,只不過要查詢的是數組中的值,而不是單獨的值。
例如數據庫中的c1表,其中colors列存儲的就是一個數組,如下面代碼所示:
結果跟我們期望的一樣,包含“red”的記錄出現了。
3.2.2 內嵌文檔的查詢
如果某一列存儲的不是一個單獨的值,而是一條有多個列的記錄,這條記錄叫做“內嵌文檔”。所以查詢內嵌文檔時,需要將條件細化到列上。
例如,數據庫中存在以下內嵌式文檔數據,其中author列的值對應的就是內嵌文檔。
結果跟我們期望的一樣,“author”是“wangwenlong”的記錄出現了。
注意 查詢內嵌對象的屬性時,記得要加上引號("")。也就是說,字段是"author.name",而不是author.name。
3.2.3 正則表達式匹配
正則表達式就是用某種模式去匹配一類字符串的一個公式,它由一些普通的字符組成。
接下來講解如何使用正則表達式來進行模糊查詢。例如,查詢不匹配“name=B*”開頭的記錄,如下面的代碼所示:
舉一個實際的例子,c1表的數據如下面的代碼所示:
> db.c1.find(); { "_id" : ObjectId("4fb5faaf6d0f9d8ea3fc91a8"), "name" : "Tony", "age" : 20 } { "_id" : ObjectId("4fb5fab96d0f9d8ea3fc91a9"), "name" : "Joe", "age" : 10 }查詢name不以“T”開頭的數據如下面的代碼所示:
> db.c1.find({name: {$not: /^T.*/}}) { "_id" : ObjectId("4fb5fab96d0f9d8ea3fc91a9"), "name" : "Joe", "age" : 10 }可以看出,只顯示“name=Tony”的數據,其他不符合規則的數據并沒有顯示出來。
3.2.4 $where查詢
$where查詢允許在查詢里執行JavaScript表達式。例如查詢a大于3的數據,可以用普通的查詢方法,如下面的代碼所示:
db.c1.find( { a : { $gt: 3 } } );
注意 “$where查詢”是指采用類似于SQL中的where語句來進行查詢的方式,但命令中并不包含where關鍵字。
也可以用$where的數值比較符號來查詢,如下面的代碼所示:
db.c1.find("this.a > 3");
但有一點需要注意,如非必要,盡量不要使用,因為一旦使用,document都必須從BSON轉換為一個JavaScript對象,所以$where查詢比一般的查詢會慢很多。
總結
以上是生活随笔為你收集整理的《MongoDB管理与开发精要》——3.2节查询语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache activemq入门示例(
- 下一篇: 《云计算揭秘企业实施云计算的核心问题》—