日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

3.2 查詢語法
MongoDB最大的特點(diǎn)是,它支持的查詢語言非常強(qiáng)大,其語法類似于面向?qū)ο蟮牟樵冋Z言,不但可以實(shí)現(xiàn)關(guān)系型數(shù)據(jù)庫查詢的大部分功能,而且還支持對數(shù)據(jù)建立索引。由于MongoDB可以支持非常復(fù)雜的數(shù)據(jù)結(jié)構(gòu),同時(shí)帶有強(qiáng)大的數(shù)據(jù)查詢功能,因此非常受歡迎,很多項(xiàng)目都考慮用MongoDB來替代MySQL等傳統(tǒng)數(shù)據(jù)庫來實(shí)現(xiàn)復(fù)雜的Web應(yīng)用。很多案例都是因?yàn)閿?shù)據(jù)量實(shí)在太大,所以遷移到MongoDB上,從而數(shù)據(jù)查詢的速度得到了非常顯著的提升。
3.2.1 數(shù)組內(nèi)容的查詢
MongoDB本身支持?jǐn)?shù)組類型的內(nèi)嵌對象,接下來講解如何查詢數(shù)組中的特定內(nèi)容。
數(shù)組內(nèi)容的查詢方法跟普通查詢方法沒有區(qū)別,只不過要查詢的是數(shù)組中的值,而不是單獨(dú)的值。
例如數(shù)據(jù)庫中的c1表,其中colors列存儲的就是一個數(shù)組,如下面代碼所示:

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

結(jié)果跟我們期望的一樣,包含“red”的記錄出現(xiàn)了。
3.2.2 內(nèi)嵌文檔的查詢
如果某一列存儲的不是一個單獨(dú)的值,而是一條有多個列的記錄,這條記錄叫做“內(nèi)嵌文檔”。所以查詢內(nèi)嵌文檔時(shí),需要將條件細(xì)化到列上。
例如,數(shù)據(jù)庫中存在以下內(nèi)嵌式文檔數(shù)據(jù),其中author列的值對應(yīng)的就是內(nèi)嵌文檔。

> 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!" } > 現(xiàn)在查詢“author=wangwenlong”的記錄,可以如下面的代碼所示: > db.c2.find( { "author.name" : "wangwenlong" } ); { "_id" : ObjectId("4ff00eeca4ea64ce4cafef81"), "author" : { "name" : "wangwenlong", "age" : 30 }, "book" : "How greate the MongoDB!" } >

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

db.users.find({name: {$not: /^B.*/}});

舉一個實(shí)際的例子,c1表的數(shù)據(jù)如下面的代碼所示:

> db.c1.find(); { "_id" : ObjectId("4fb5faaf6d0f9d8ea3fc91a8"), "name" : "Tony", "age" : 20 } { "_id" : ObjectId("4fb5fab96d0f9d8ea3fc91a9"), "name" : "Joe", "age" : 10 }

查詢name不以“T”開頭的數(shù)據(jù)如下面的代碼所示:

> db.c1.find({name: {$not: /^T.*/}}) { "_id" : ObjectId("4fb5fab96d0f9d8ea3fc91a9"), "name" : "Joe", "age" : 10 }

可以看出,只顯示“name=Tony”的數(shù)據(jù),其他不符合規(guī)則的數(shù)據(jù)并沒有顯示出來。
3.2.4 $where查詢
$where查詢允許在查詢里執(zhí)行JavaScript表達(dá)式。例如查詢a大于3的數(shù)據(jù),可以用普通的查詢方法,如下面的代碼所示:
db.c1.find( { a : { $gt: 3 } } );
注意 “$where查詢”是指采用類似于SQL中的where語句來進(jìn)行查詢的方式,但命令中并不包含where關(guān)鍵字。
也可以用$where的數(shù)值比較符號來查詢,如下面的代碼所示:
db.c1.find("this.a > 3");
但有一點(diǎn)需要注意,如非必要,盡量不要使用,因?yàn)橐坏┦褂?#xff0c;document都必須從BSON轉(zhuǎn)換為一個JavaScript對象,所以$where查詢比一般的查詢會慢很多。

總結(jié)

以上是生活随笔為你收集整理的《MongoDB管理与开发精要》——3.2节查询语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。