mongodb查詢

高級(jí)查詢

find()

1 查詢所有記錄

     db.users.find()

2 查詢name為apple的記錄

     db.users.find({“name”:”apple”})

3 查詢country為china萨惑,gender為1的記錄

     db.users.find({“country”:”china”,” gender”:1})

限制結(jié)果集

對(duì)應(yīng)到標(biāo)準(zhǔn)sql, 之前是select * from, 現(xiàn)在需要的是select name from …

1 查詢name為apple犬钢,并且結(jié)果只顯示name

     db.users.find({“name”:”apple”}, {“name”:true})

注:后面這個(gè)參數(shù){name:true}代表只顯示name填硕,如果有一個(gè)設(shè)置true,那么其他未設(shè)置的都是默認(rèn)false胧辽,但是_id字段是默認(rèn)true的确垫,如果不想顯示_id,可以這么寫:

db.users.find({“name”:”apple”}, {“name”:true,” _id”:false})


2 查詢所有記錄吟宦,并且結(jié)果只顯示name和country

     db.users.find(null, {“name”:true, “country”:true, “_id”:false})

findOne()

顧名思義篮洁,只顯示查詢到的第一條記錄,類似于select top 1 …

db.users.findOne({“gender”:0})

limit()

類似于sqlserver中的top

     db.users.find({“gender”:0}).limit(2);

條件操作符 <, <=, >, >=, !=

$lt 小于 (less than)

$lte 小于等于 (less than equals)

$gt 大于 (greater than)

$gte 大于等于 (greater than equals)

$ne 不等于 (not equals)

查出age大于30的記錄

db.users.find({“age”:{$gt:30}})

查出age>=30 且 <=40的記錄

     db.users.find({“age”:{$gt:30, $lt:40}})

$exists

用于判斷字段是否存在,比如我們向users集合里面添加一條記錄殃姓,只有name屬性

db.users.insert({name:”testExists”})

現(xiàn)在我們查出不存在age字段的記錄

db.users.find({“age”:{$exists:false}})

查出有age字段但沒有g(shù)ender字段的記錄

db.users.find({“age”:{$exists:true},” gender”:{$exists:false}})

null值的處理

需要注意的null與exists的區(qū)別

null指的是字段為空或者字段不存在

exists指的是字段是否存在

比較下面兩條記錄

{“name”:null,” age”:44}

{“age”:45}

如果使用null查詢 db.xxx.find({name:null}) 則會(huì)查出上面兩條記錄

但是我們只想找出存在name字段并且其為空的記錄袁波,可以這么查詢

db.xxx.find({“name”:{$exists:true, $in:[null]}});

$mod

取模,比如我們查詢年齡取模10等于1的記錄,應(yīng)該是年齡為1蜗侈,11篷牌,21,…

db.users.find({“age”:{$mod:[10,1]}})

$in & $nin

這個(gè)類似于標(biāo)準(zhǔn)sql的in與not in

查詢age為23或者24的記錄

db.users.find({“age”:{$in:[23, 24]}})

查詢age不為23或者24的記錄

db.users.find({“age”:{$nin:[23, 24]}})

$not

可以用在任何其他條件之上

db.users.find({$not:{“age”:{$gt:25}}})

$or

查詢年齡為32或者name為zhangsan的記錄

db.users.find({$or:[{“name”:”zhangsan”}, {“age”:32}]})

數(shù)組操作

假設(shè)我們有下面兩個(gè)document

${“name”:”zhangsan”,” booksNumber”:[101, 102, 103]}

${“name”:”lisi”, “booksNumber”:[101, 103]}

$all

db.users.find({“booksNumber”:{$all:[101, 102]}});

那么就能查出第一條記錄踏幻,它需要滿足里面所有的條件

$size

我們需要查詢只有booksNumber里面只有兩個(gè)的記錄

db.users.find({“booksNumber”:{$size:2}})

count()

查詢總記錄數(shù)

db.users.find().count()

注:如果我們使用了limit

db.users.find().limit(3).count() 這里是取前三條記錄枷颊,但是調(diào)用count()后還是顯示總記錄數(shù),如果我們需要返回被限制后的記錄數(shù)

db.users.find().limit(3).count(true)即可

sort()

這也是個(gè)顧名思義的操作该面,排序: 1 代表升序 -1 代表降序

按名字進(jìn)行升序排序

db.users.find().sort({name:1})

先按名字升序夭苗,再按年齡降序

db.users.find().sort({name:1, age:-1})

distinct()

查詢年齡小于等于50所有的name并去除重復(fù)

db.users.distinct(“name”, {“age”:{$lte:50}})

skip()

這一特性通常用于分頁

跳過三條記錄并取之后的三條記錄

db.users.find().skip(3).limit(3)

查詢內(nèi)嵌文檔

比如要查詢這么一條記錄:

{ “books”:{“bookid”:100, “bookname”:”english”} }

db.users.find({“books.bookid”:100});

使用正則表達(dá)式

使用正則表達(dá)式也是mongodb非常強(qiáng)大的特性

比如我們使用正則表達(dá)式對(duì)name進(jìn)行過濾

db.users.find({“name”:/^[fc]{1}/})

$where

可以使用javascript代碼進(jìn)行查詢,這使得查詢幾乎能做任何事情

db.users.find({$where:function() {

     //this指遍歷到的當(dāng)前的document

     //根據(jù)return true or false來判斷此document是否滿足find的條件

     if(this.name == “zhangsan”) {

               return true;

     }

     for(var prop in this) {

               if(this[prop] == “123”) {

                        return true;

               }

}

return false;

}});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隔缀,一起剝皮案震驚了整個(gè)濱河市题造,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猾瘸,老刑警劉巖界赔,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丢习,死亡現(xiàn)場離奇詭異,居然都是意外死亡淮悼,警方通過查閱死者的電腦和手機(jī)咐低,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敛惊,“玉大人渊鞋,你說我怎么就攤上這事∏萍罚” “怎么了锡宋?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長特恬。 經(jīng)常有香客問我执俩,道長,這世上最難降的妖魔是什么癌刽? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任役首,我火速辦了婚禮,結(jié)果婚禮上显拜,老公的妹妹穿的比我還像新娘衡奥。我一直安慰自己,他們只是感情好远荠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布矮固。 她就那樣靜靜地躺著,像睡著了一般譬淳。 火紅的嫁衣襯著肌膚如雪档址。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天邻梆,我揣著相機(jī)與錄音守伸,去河邊找鬼。 笑死浦妄,一個(gè)胖子當(dāng)著我的面吹牛尼摹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剂娄,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼窘问,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了宜咒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤把鉴,失蹤者是張志新(化名)和其女友劉穎故黑,沒想到半個(gè)月后儿咱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡场晶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年混埠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗轻。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钳宪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扳炬,到底是詐尸還是另有隱情吏颖,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布恨樟,位于F島的核電站半醉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏劝术。R本人自食惡果不足惜缩多,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望养晋。 院中可真熱鬧衬吆,春花似錦、人聲如沸绳泉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圈纺。三九已至秦忿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛾娶,已是汗流浹背灯谣。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔琅,地道東北人胎许。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像罗售,于是被迫代替她去往敵國和親辜窑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容