這篇文章將為大家詳細(xì)講解有關(guān)怎樣進(jìn)行MongoDB文檔查詢(xún)操作,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
成都創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)建始,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18980820575
null的查詢(xún)稍微有點(diǎn)不同,假如我想查詢(xún)z為null的數(shù)據(jù),如下:
db.sang_collect.find({z:null})
這樣不僅會(huì)查出z為null的文檔,也會(huì)查出所有沒(méi)有z字段的文檔,如果只想查詢(xún)z為null的字段,那就再多加一個(gè)條件,判斷一下z這個(gè)字段存在不,如下:
db.sang_collect.find({z:{$in:[null],$exists:true}})
使用正則表達(dá)式查詢(xún)我們?cè)谇懊嬉惨呀?jīng)介紹過(guò)了,這里的正則表達(dá)式語(yǔ)法和JavaScript中的正則表達(dá)式語(yǔ)法一致,比如查詢(xún)所有key為x,value以hello開(kāi)始的文檔且不區(qū)分大小寫(xiě):
db.sang_collec.find({x:/^(hello)(.[a-zA-Z0-9])+/i})
假設(shè)我有一個(gè)數(shù)據(jù)集如下:
{ "_id" : ObjectId("59f1ad41e26b36b25bc605ae"), "books" : [ "三國(guó)演義", "紅樓夢(mèng)", "水滸傳" ] }
查詢(xún)books中含有三國(guó)演義的文檔,如下:
db.sang_collect.find({books:"三國(guó)演義"})
如果要查詢(xún)既有三國(guó)演義又有紅樓夢(mèng)的文檔,可以使用$all,如下:
db.sang_collect.find({books:{$all:["三國(guó)演義","紅樓夢(mèng)"]}})
當(dāng)然我們也可以使用精確匹配,比如查詢(xún)books為"三國(guó)演義","紅樓夢(mèng)", "水滸傳"
的數(shù)據(jù),如下:
db.sang_collect.find({books:["三國(guó)演義","紅樓夢(mèng)", "水滸傳"]})
不過(guò)這種就會(huì)一對(duì)一的精確匹配。
也可以按照下標(biāo)匹配,比如我想查詢(xún)數(shù)組中下標(biāo)為2的項(xiàng)的為"水滸傳"
的文檔,如下:
db.sang_collect.find({"books.2":"水滸傳"})
也可以按照數(shù)組長(zhǎng)度來(lái)查詢(xún),比如我想查詢(xún)數(shù)組長(zhǎng)度為3的文檔:
db.sang_collect.find({books:{$size:3}})
如果想查詢(xún)數(shù)組中的前兩條數(shù)據(jù),可以使用$slice,如下:
db.sang_collect.find({},{books:{$slice:2}})
注意這里要寫(xiě)在find的第二個(gè)參數(shù)的位置。2表示數(shù)組中前兩個(gè)元素,-2表示從后往前數(shù)兩個(gè)元素。也可以截取數(shù)組中間的元素,比如查詢(xún)數(shù)組的第二個(gè)到第四個(gè)元素:
db.sang_collect.find({},{books:{$slice:[1,3]}})
數(shù)組中的與的問(wèn)題也值得說(shuō)一下,假設(shè)我有如下數(shù)據(jù):
{ "_id" : ObjectId("59f208bc7b00f982986c669c"), "x" : [ 5.0, 25.0 ] }
我想將數(shù)組中value取值在(10,20)之間的文檔獲取到,如下操作:
db.sang_collect.find({x:{$lt:20,$gt:10}})
此時(shí)上面這個(gè)文檔雖然不滿(mǎn)足條件卻依然被查找出來(lái)了,因?yàn)?code>5<20,而25>10
,要解決這個(gè)問(wèn)題,我們可以使用$elemMatch,如下:
db.sang_collect.find({x:{$elemMatch:{$lt:20,$gt:10}}})
$elemMatch要求MongoDB同時(shí)使用查詢(xún)條件中的兩個(gè)語(yǔ)句與一個(gè)數(shù)組元素進(jìn)行比較。
嵌套文檔有兩種查詢(xún)方式,比如我的數(shù)據(jù)如下:
{ "_id" : ObjectId("59f20c9b7b00f982986c669f"), "x" : 1.0, "y" : { "z" : 2.0, "k" : 3.0 } }
想要查詢(xún)上面這個(gè)文檔,我的查詢(xún)語(yǔ)句如下:
db.sang_collect.find({y:{z:2,k:3}})
但是這種寫(xiě)法要求嚴(yán)格匹配,順序都不能變,假如寫(xiě)成了db.sang_collect.find({y:{k:3,z:2}})
,就匹配不到了,因此這種方法不夠靈活,我們一般推薦的是下面這種寫(xiě)法:
db.sang_collect.find({"y.z":2,"y.k":3})
這種寫(xiě)法可以任意顛倒順序。
關(guān)于怎樣進(jìn)行MongoDB文檔查詢(xún)操作就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
分享名稱(chēng):怎樣進(jìn)行MongoDB文檔查詢(xún)操作
網(wǎng)站路徑:http://m.rwnh.cn/article22/gspdcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、外貿(mào)建站、企業(yè)建站、品牌網(wǎng)站建設(shè)、App開(kāi)發(fā)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)