日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

mongo执行逻辑表达式_MongoDB 常用查询操作

發(fā)布時(shí)間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongo执行逻辑表达式_MongoDB 常用查询操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MongoDB 查詢操作可實(shí)現(xiàn)大部分關(guān)系型數(shù)據(jù)庫(kù)的常用查詢操作,本文對(duì) MongoDB 常用查詢進(jìn)行講解。

在進(jìn)行操作講解前,先展示當(dāng)前 MongoDB 中已存在的文檔,集合名稱article

條件大小比較操作

查詢文檔時(shí),對(duì)條件的大小、范圍進(jìn)行過濾查詢,以下是常用比較操作符

操作符

說(shuō)明

$eq

查詢與條件值相等的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 =

$ne

查詢與條件值不相等或不存在的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 !=

$gt

查詢大于條件值的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 >

$gte

查詢大于或等于條件值的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 >=

$lt

查詢小于條件值的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 <

$lte

查詢小于或等于條件值的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 <=

$in

查詢 $in 數(shù)據(jù)里值的文檔,類似關(guān)系型數(shù)據(jù)庫(kù)的 in

$nin

與 $in 查詢相反,類似關(guān)系型數(shù)據(jù)庫(kù)的 not in

由于使用大于、小于、等于關(guān)系都差不多,比較好理解,這里就舉一個(gè)例子說(shuō)明,使用$gte來(lái)獲取大于或等于150的 visitor

db.article.find({"visitor":?{$gte:150}})

執(zhí)行結(jié)果:

使用$in時(shí),必須用數(shù)組來(lái)設(shè)置條件值,比如獲取 visitor 為70和150的值

db.article.find({"visitor":?{$in:[70,?150]}})

執(zhí)行結(jié)果:

邏輯操作符

多條件查詢中,條件與條件連接符號(hào)叫做邏輯操作符。常用操作符:

操作符

說(shuō)明

$and

表示所有條件同時(shí)滿足時(shí)成立

$nor

與$and相反,所有條件都不滿足時(shí)成立

$or

只要有一個(gè)條件滿足則成立

$not

表示字段存在并且不符合條件

$and 查詢author=ytao且visitor=150的文檔

db.article.find(

{$and:[

{"author":{$eq:"ytao"}},

{"visitor":{$eq:150}}

]}

)

$nor查詢不是author=ytao和不是visitor=170的文檔

db.article.find(

{$nor:[

{"author":{$eq:"ytao"}},

{"visitor":{$eq:170}}

]}

)

$or查詢author=ytao或visitor=170的文檔

db.article.find(

{$or:[

{"author":{$eq:"ytao"}},

{"visitor":{$eq:170}}

]}

)

$not查詢不是author=ytao的文檔

db.article.find(

{"author":{$not:{$eq:"ytao"}}}

)

元素操作符

對(duì)字段元素上的操作符叫做元素操作符

操作符

說(shuō)明

$exists

判斷文檔中字段是否存在,true為存在,false為不存在

$type

篩選指定字段類型的文檔

$exists查詢author字段存在的文檔

db.article.find(

{"author":{$exists:true}}

)

$type查詢author字段為數(shù)組的文檔

db.article.find(

{"author":{$type:"array"}}

)

正則表達(dá)式

MongoDB 支持正則表達(dá)式匹配文檔,通過正則表達(dá)我們可以實(shí)現(xiàn)關(guān)系型數(shù)據(jù)庫(kù)的模糊查詢,以及更加強(qiáng)大匹配規(guī)則,其使用語(yǔ)法有三種:

{?:?{?$regex:?/pattern/, $ options :?''?}?}

{?:?{?$regex:?'pattern', $ options :?''?}?}

{?:?{?$regex:?/pattern/?}?}

參數(shù)/pattern/和'pattern'都是表示正則表達(dá)式,直接添加字符串可用來(lái)模糊查詢。參數(shù)$options為可選參數(shù),有四個(gè)固定值選擇

options 選項(xiàng)

說(shuō)明

i

匹配過程忽略大小寫

x

匹配過程忽略空格

m

匹配多行數(shù)據(jù),但都是從每行的起點(diǎn)和結(jié)尾匹配

s

將多行轉(zhuǎn)換成一行后進(jìn)行匹配,可匹配換行符\n字符串

模糊查詢author為Tao的示例:

db.article.find(

{"author":{$regex:/Tao/,?$options:'i'}}

)

查詢結(jié)果

從上面查詢結(jié)果中可以看到,數(shù)據(jù)格式也可以進(jìn)行匹配到。

聚合操作

聚合操作可以實(shí)現(xiàn)分組、排序、分頁(yè)、多集合關(guān)聯(lián)查詢等,使用語(yǔ)法格式:

db.collection.aggregate([

{聚合操作一},

{聚合操作二}

])

條件篩選

$match 用來(lái)進(jìn)行條件篩選,可以使用一些條件限制來(lái)進(jìn)行查詢。

語(yǔ)法格式:

db.article.aggregate([

{?$match:??}

])

查詢author = ytao且visitor > 100的文檔

db.article.aggregate([

{?$match:?{

$and:?[

{"author":?{$eq:?"ytao"}},

{"visitor":?{$gt:?100}}

]}

}

])

分組操作

$group 是分組操作符,類似于關(guān)系型數(shù)據(jù)庫(kù)中的group by操作。其語(yǔ)法格式為:

db.collection.aggregate([

{

$group:{

"_id":"$",

:{:"$"}

}

}

])

其中運(yùn)算符如下:

運(yùn)算符

說(shuō)明

$avg

當(dāng)前組的平均數(shù)

$sum

當(dāng)前組的總和

$min

當(dāng)前組的最小值

$max

當(dāng)前組的最大值

$first

當(dāng)前組的第一個(gè)的值

$last

當(dāng)前組的最后一個(gè)的值

$push

數(shù)組形式展示指定的當(dāng)前組字段值

$addToSet

數(shù)組形式展示指定的當(dāng)前組字段不重復(fù)值

分組求出每個(gè)author的visitor平均數(shù)的例子

db.article.aggregate([

{

$group:{

"_id":"$author",

"avg_visitor":{$sum:"$visitor"}

}

}

])

字段顯示

指定查詢后返回的字段使用**$project**,字段指定默認(rèn)值為0,但是_id默認(rèn)為1,顯示指定字段語(yǔ)法為:

db.collection.aggregate([

{

$project:{

"":?<0或1>,

"":<0或1>

}

}

])

展示title和visitor字段示例:

db.article.aggregate([

{

$project:{

"_id":?0,

"title":?1,

"visitor":?1

}

}

])

同時(shí),$project還以搭配$split(字符串拆分)、$substr(截取字符串)、$concat(合并字符串)、$switch(條件判斷)、$toLower(轉(zhuǎn)換成小寫)、$toUpper(轉(zhuǎn)換成大寫)、時(shí)間格式處理等等操作符進(jìn)行操作,語(yǔ)法為:

db.collection.aggregate([

{

$project:{

"":?{:?},

"":?{:?},

}

}

])

例如將title中的字母都轉(zhuǎn)換成大寫

db.article.aggregate([

{

$project:{

"titleField":{?$toUpper:"$title"?}

}

}

])

返回結(jié)果

排序操作

**sort排序用1和-1`表示正序和倒序。

語(yǔ)法格式:

db.collection.aggregate([

{

$sort:{

"":?<1?或?-1>

}

}

])

按visitor字段名進(jìn)行倒序排序:

db.article.aggregate([

{

$sort:{

"visitor":?-1

}

}

])

排序結(jié)果

分頁(yè)操作

分頁(yè)使用 和limit 進(jìn)行分頁(yè)操作。$skip表示跳過文檔的數(shù)量,$limit表示返回的文檔數(shù)量,這兩個(gè)指令使用,類似于關(guān)系型數(shù)據(jù)中的limit , 分頁(yè)操作。

語(yǔ)法格式:

db.collection.aggregate([

{$skip:?},

{$limit:?}

])

查詢第二頁(yè)的兩條數(shù)據(jù)示例:

db.article.aggregate([

{$skip:?2},

{$limit:?2}

])

返回結(jié)果

統(tǒng)計(jì)文檔數(shù)量

$count用來(lái)統(tǒng)計(jì)文檔數(shù)量,進(jìn)行條件篩選時(shí)。

語(yǔ)法格式:

db.collection.aggregate([

{?$count:?""?}

])

統(tǒng)計(jì)全部文檔數(shù)量:

db.article.aggregate([

{?$count:?"數(shù)量"?}

])

統(tǒng)計(jì)結(jié)果:

多集合關(guān)聯(lián)查詢

$lookup 是用來(lái)多集合關(guān)聯(lián)查詢時(shí)使用的,類似于關(guān)系型數(shù)據(jù)庫(kù)中的聯(lián)表查詢。

使用語(yǔ)法:

db.collection.aggregate([

{

$lookup:?{

from:?,

localField:?,

foreignField:?,

as:?

}

}

])

在進(jìn)行多集合關(guān)聯(lián)查詢演示前,先添加一個(gè)集合person,里面添加一條數(shù)據(jù):

查詢age = 18的集合:

db.article.aggregate([

{

$lookup:?{

from:?"person",

localField:?"author",

foreignField:?"author",

as:?"person_info"

}

},

{

$match:{

"person_info.age":?{$eq:?18}

}

}

])

返回結(jié)果:

總結(jié)

對(duì) MongoDB 的常用查詢操作進(jìn)行了解后,可以發(fā)現(xiàn)它和關(guān)系型數(shù)據(jù)操作有很多類似的操作思想。對(duì)于這些操作的使用,相對(duì)也是較為靈活,提供的 API 也是較為強(qiáng)大,幾乎能滿足大部分使用場(chǎng)景的檢索要求。掌握這些查詢操作,可以更高效的獲取 MongoDB 中的文檔。

總結(jié)

以上是生活随笔為你收集整理的mongo执行逻辑表达式_MongoDB 常用查询操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。