MongoDB 查詢操作的實(shí)例詳解
MongoDB 查詢操作的實(shí)例詳解
使用find或findOne進(jìn)行查詢。并可以進(jìn)行范圍查詢、數(shù)據(jù)集查詢、不等式查詢,以及其他的一些查詢。
查詢將會(huì)返回DBcursor 游標(biāo)只有在你需要的時(shí)候返回文檔
針對(duì)游標(biāo)返回的文檔(結(jié)果集) 進(jìn)行操作 例如:忽略一定數(shù)量的結(jié)果,或者返回結(jié)果的數(shù)量,以及對(duì)結(jié)果的排序。
1.指定需要返回的鍵
有時(shí)候僅僅對(duì)文檔的某幾個(gè)鍵值感興趣,可以屏蔽返回的不感興趣的鍵值,返回感興趣的鍵值
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” 分別對(duì)應(yīng) <,<=,>,>=。
小貼士:在mongodb shell中定義方法的大概格式:
mongos> var insertName=function(){
… for(var i=0;i<10;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”<來查詢文件插入的時(shí)間
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)用于多個(gè)元素匹配數(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” ] }
對(duì)數(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ù)組中添加元素,同時(shí)增加“size”的值,自增操作非???,對(duì)性能不影響。
3.slice
可以返回某個(gè)鍵匹配的數(shù)組元素的一個(gè)子集
mongos> db.blog.find({“fruit”:{size:3}},{"fruit":{"slice”:-2}})
{ “_id” : 2, “fruit” : [ “kumquat”, “orange” ] }
{ “_id” : 3, “fruit” : [ “banana”, “apple” ] }
4.查詢內(nèi)嵌文檔
點(diǎn)語法即可
mongos>db.people.find({“name.first”:”Joe”,”name.last”:”Schmoe”})
要正確的指定一組元素,而不必指定每個(gè)鍵,則需要使用$elemMatch 用來在查詢條件中不非指定匹配數(shù)組中的單個(gè)內(nèi)嵌文檔。
db.blog.find({“comments”:{“$elemMatch”:
{“author”:”joe”,”score”:{“$gte”:5}}}})
5.limit、skip和sort
三個(gè)方法可以組合進(jìn)行分頁.
比如你有一個(gè)在線商店,有人搜索mp3,若想每頁返回50個(gè)結(jié)果,而且按照價(jià)格從高到低升序排列。
db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
db.stock.find({“des”:”mp3”}).skip(50).limit(50).sort({“price”:-1})
……
然而略過太多會(huì)導(dǎo)致性能問題。
解決方法:盡量避免使用skip略過大量結(jié)果。
var page1=db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
var lastest=null;//解決方法,將游標(biāo)最后一個(gè)文檔記錄下來,成為第二次查詢的條件的一部分
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ī)選取文檔
正確方法是在插入文檔時(shí)插入一個(gè)隨機(jī)值的鍵,然后按照普通查詢進(jìn)行find()即可。
感謝閱讀,如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,謝謝大家對(duì)本站的支持!
相關(guān)文章
mongodb分片技術(shù)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了mongodb分片技術(shù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
MongoDB 3.6版本中bind_ip設(shè)置詳解
這篇文章主要給大家介紹了關(guān)于MongoDB 3.6版本中bind_ip設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
MongoDB模糊查詢正則regex(類似like?和?not?like)
在類關(guān)系型數(shù)據(jù)庫中,like和not?like是常用的模糊查詢操作符,它允許我們?cè)谄ヅ渥侄蔚臅r(shí)候使用通配符,在MongoDB中,也有類似的操作符,MongoDB?可以使用?$regex?操作符來設(shè)置匹配字符串的正則表達(dá)式,MongoDB?使用?PCRE(Perl?兼容的正則表達(dá)式)作為正則表達(dá)式語言2024-02-02
CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程
這篇文章主要介紹了CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程,本文共分5個(gè)步驟完成MongoDB的安裝,需要的朋友可以參考下2015-01-01
MongoDB的基礎(chǔ)查詢和索引操作方法總結(jié)
MongoDB使用JavaScript作為shell腳本,可以代替關(guān)系型數(shù)據(jù)庫中的SQL語句完成查詢操作,包括索引下的查詢操作,這里我們就來整理MongoDB的基礎(chǔ)查詢和索引操作方法總結(jié):2016-07-07
Mongodb 如何將時(shí)間戳轉(zhuǎn)換為年月日日期
這篇文章主要介紹了Mongodb 如何將時(shí)間戳轉(zhuǎn)換為年月日日期,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
2021最新版windows10系統(tǒng)MongoDB數(shù)據(jù)庫安裝及配置環(huán)境
這篇文章主要介紹了2021最新版MongoDB數(shù)據(jù)庫安裝及配置環(huán)境(windows10系統(tǒng)),本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03

