久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MongoDB 查詢操作的實例詳解

141次閱讀
沒有評論

共計 3165 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

MongoDB 查詢操作的實例詳解

使用 find 或 findOne 進(jìn)行查詢。并可以進(jìn)行范圍查詢、數(shù)據(jù)集查詢、不等式查詢,以及其他的一些查詢。
查詢將會返回 DBcursor 游標(biāo)只有在你需要的時候返回文檔

針對游標(biāo)返回的文檔(結(jié)果集)進(jìn)行操作 例如:忽略一定數(shù)量的結(jié)果,或者返回結(jié)果的數(shù)量,以及對結(jié)果的排序。

1. 指定需要返回的鍵

有時候僅僅對文檔的某幾個鍵值感興趣,可以屏蔽返回的不感興趣的鍵值,返回感興趣的鍵值

mongos db.blog.find({},{“name”:1}) 
{“_id”: ObjectId(“5659836e73c8340448fa470e”) } 
{“_id”: ObjectId(“565e5c0e73c8340448fa470f”) } 
{“_id”: ObjectId(“565f998e73c8340448fa4710”) } 
{“_id”: 1,“name”:“zmkzmkzmkzmkzmk”} 
{“_id”: 2,“name”:“zmkzmkzmkzmkzmk”} 
{“_id”: 3,“name”:“zmkzmkzmkzmkzmk”} 
{“_id”: ObjectId(“566004d173c8340448fa4712”),“name”:“zmk”}

可以這樣:

mongos db.blog.find({},{“name”:1,”_id”:0}) 
{“name”:“zmkzmkzmkzmkzmk”} 
{“name”:“zmkzmkzmkzmkzmk”} 
{“name”:“zmkzmkzmkzmkzmk”} 
{“name”:“zmk”}

指定返回的鍵值,是查詢結(jié)果更高效。此接口可用于條件查詢,方便結(jié)果處理。

2. 查詢條件

比較操作符

"$lt"、"$lte"、“$gt”,“$gte”分別對應(yīng) , =,, =。

小貼士:在 mongodb shell 中定義方法的大概格式:

mongos var insertName=function(){… for(var i=0;i i++){… db.blog.insert({“_id”:1,”name”:”zmk”+i}) 
mongos insertName()

效果:

mongos db.blog.find() 
{“_id”: 1,“name”:“zmk0”} 
{“_id”: 0,“name”:“zmk0”} 
{“_id”: 2,“name”:“zmk2”} 
{“_id”: 3,“name”:“zmk3”} 
{“_id”: 4,“name”:“zmk4”} 
{“_id”: 5,“name”:“zmk5”} 
{“_id”: 6,“name”:“zmk6”} 
{“_id”: 7,“name”:“zmk7”} 
{“_id”: 8,“name”:“zmk8”} 
{“_id”: 9,“name”:“zmk9”}

觀察下面的效果,find 可以使用“$lt”<來查詢文件插入的時間

mongos db.blog.insert({“_id”:10,”time”:new Date()}) 
WriteResult({“nInserted”: 1}) 
mongos db.blog.find({“time”:{“$lt”:new Date()}}) 
{“_id”: 10,“time”: ISODate(“2015-12-05T12:08:53.469Z”) }

3. 查詢數(shù)組

1.$all

應(yīng)用于多個元素匹配數(shù)組,且并無順序。

mongos db.blog.insert({“_id”:1,”fruit”:[“apple”,”banana”,”peach”]}) 
WriteResult({“nInserted”: 1}) 
mongos db.blog.insert({“_id”:2,”fruit”:[“apple”,”kumquat”,”orange”]}) 
WriteResult({“nInserted”: 1}) 
mongos db.blog.insert({“_id”:3,”fruit”:[“cherry”,”banana”,”apple”]}) 
WriteResult({“nInserted”: 1}) 
mongos db.blog.find({“fruit”:{$all:[“apple”,”banana”]}}) 
{“_id”: 1,“fruit”: [“apple”,“banana”,“peach”] } 
{“_id”: 3,“fruit”: [“cherry”,“banana”,“apple”] }

對數(shù)組進(jìn)行精確匹配,可以使用 key.index 語法指定下標(biāo)

mongos db.blog.find({“fruit.2”:”peach”}) 
{“_id”: 1,“fruit”: [“apple”,“banana”,“peach”] }

2.$size

查詢特定長度的數(shù)組。

mongos db.blog.find({“fruit”:{$size:3}}) 
{“_id”: 1,“fruit”: [“apple”,“banana”,“peach”] } 
{“_id”: 2,“fruit”: [“apple”,“kumquat”,“orange”] } 
{“_id”: 3,“fruit”: [“cherry”,“banana”,“apple”] }

可以再存有數(shù)組的文檔中添加 size 鍵,每一次向指定數(shù)組中添加元素,同時增加“size”的值,自增操作非常快,對性能不影響。

3.slice

可以返回某個鍵匹配的數(shù)組元素的一個子集

mongos db.blog.find({“fruit”:{size:3}},{"fruit":{"slice”:-2}}) 
{“_id”: 2,“fruit”: [“kumquat”,“orange”] } 
{“_id”: 3,“fruit”: [“banana”,“apple”] }

4. 查詢內(nèi)嵌文檔

點語法即可

mongos db.people.find({“name.first”:”Joe”,”name.last”:”Schmoe”})

要正確的指定一組元素,而不必指定每個鍵,則需要使用 $elemMatch 用來在查詢條件中不非指定匹配數(shù)組中的單個內(nèi)嵌文檔。

db.blog.find({“comments”:{“$elemMatch”:
{“author”:”joe”,”score”:{“$gte”:5}}}})

5.limit、skip 和 sort

三個方法可以組合進(jìn)行分頁.

比如你有一個在線商店,有人搜索 mp3,若想每頁返回 50 個結(jié)果,而且按照價格從高到低升序排列。

db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1}) 
db.stock.find({“des”:”mp3”}).skip(50).limit(50).sort({“price”:-1}) 
……

然而略過太多會導(dǎo)致性能問題。

解決方法:盡量避免使用 skip 略過大量結(jié)果。

var page1=db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1}) 
var lastest=null;// 解決方法,將游標(biāo)最后一個文檔記錄下來,成為第二次查詢的條件的一部分 
while(page1.hasNext()){lastest=page1.next(); 
display(lastest); 
var page2=db.stock.find({“des”:”mp3”},{“price”:{$gt:lastest.price}}).limit(50).sort({“price”:-1})

隨機選取文檔

正確方法是在插入文檔時插入一個隨機值的鍵,然后按照普通查詢進(jìn)行 find() 即可。

  感謝閱讀,如有疑問請留言或者到本站社區(qū)交流討論,謝謝大家對本站的支持!

向 AI 問一下細(xì)節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-18發(fā)表,共計3165字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 额敏县| 青阳县| 平安县| 玛纳斯县| 吐鲁番市| 海兴县| 扶余县| 鄄城县| 贵德县| 扬中市| 鄂伦春自治旗| 紫阳县| 息烽县| 十堰市| 浙江省| 民县| 顺义区| 苍梧县| 固阳县| 谢通门县| 黑水县| 泰顺县| 靖西县| 房山区| 富阳市| 樟树市| 恩平市| 通海县| 邯郸县| 准格尔旗| 治县。| 县级市| 沙湾县| 汉源县| 梁河县| 姚安县| 广州市| 泗水县| 沙田区| 平顺县| 塔城市|