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,可以這么寫(xiě):

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字段但沒(méi)有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()

這一特性通常用于分頁(yè)

跳過(guò)三條記錄并取之后的三條記錄

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)行過(guò)濾

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

$where

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

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

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

     //根據(jù)return true or false來(lái)判斷此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)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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