日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《MongoDB管理与开发精要》——3.2节查询语法

發布時間:2025/7/14 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MongoDB管理与开发精要》——3.2节查询语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.2 查詢語法
MongoDB最大的特點是,它支持的查詢語言非常強大,其語法類似于面向對象的查詢語言,不但可以實現關系型數據庫查詢的大部分功能,而且還支持對數據建立索引。由于MongoDB可以支持非常復雜的數據結構,同時帶有強大的數據查詢功能,因此非常受歡迎,很多項目都考慮用MongoDB來替代MySQL等傳統數據庫來實現復雜的Web應用。很多案例都是因為數據量實在太大,所以遷移到MongoDB上,從而數據查詢的速度得到了非常顯著的提升。
3.2.1 數組內容的查詢
MongoDB本身支持數組類型的內嵌對象,接下來講解如何查詢數組中的特定內容。
數組內容的查詢方法跟普通查詢方法沒有區別,只不過要查詢的是數組中的值,而不是單獨的值。
例如數據庫中的c1表,其中colors列存儲的就是一個數組,如下面代碼所示:

> db.c1.find() { "_id" : ObjectId("4ff00d91a4ea64ce4cafef7b"), "colors" : [ "red", "black" ] } { "_id" : ObjectId("4ff00da5a4ea64ce4cafef7c"), "colors" : [ "blue", "yellow" ] } > 現在要查詢colors中有red的記錄,可以如下面的代碼所示: > db.c1.find( { colors : "red" } ) { "_id" : ObjectId("4ff00d91a4ea64ce4cafef7b"), "colors" : [ "red", "black" ] } >

結果跟我們期望的一樣,包含“red”的記錄出現了。
3.2.2 內嵌文檔的查詢
如果某一列存儲的不是一個單獨的值,而是一條有多個列的記錄,這條記錄叫做“內嵌文檔”。所以查詢內嵌文檔時,需要將條件細化到列上。
例如,數據庫中存在以下內嵌式文檔數據,其中author列的值對應的就是內嵌文檔。

> db.c2.find() { "_id" : ObjectId("4ff00eb1a4ea64ce4cafef80"), "author" : { "name" : "Dan Brown", "age" : 38 }, "book" : "The Lost Symbol" } { "_id" : ObjectId("4ff00eeca4ea64ce4cafef81"), "author" : { "name" : "wangwenlong", "age" : 30 }, "book" : "How greate the MongoDB!" } > 現在查詢“author=wangwenlong”的記錄,可以如下面的代碼所示: > db.c2.find( { "author.name" : "wangwenlong" } ); { "_id" : ObjectId("4ff00eeca4ea64ce4cafef81"), "author" : { "name" : "wangwenlong", "age" : 30 }, "book" : "How greate the MongoDB!" } >

結果跟我們期望的一樣,“author”是“wangwenlong”的記錄出現了。
注意 查詢內嵌對象的屬性時,記得要加上引號("")。也就是說,字段是"author.name",而不是author.name。
3.2.3 正則表達式匹配
正則表達式就是用某種模式去匹配一類字符串的一個公式,它由一些普通的字符組成。
接下來講解如何使用正則表達式來進行模糊查詢。例如,查詢不匹配“name=B*”開頭的記錄,如下面的代碼所示:

db.users.find({name: {$not: /^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节查询语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。