MongoDB中的關鍵字


一.查詢中常見的 (等於 大於 小於 大於等於 小於等於)

等於 : 在MongoDB中什么字段等於什么值其實就是 " : " 來搞定 比如 "name" : "路飛學城"

大於 : 在MongoDB中的 大於 > 號 我們用 : $gt  比如 :  "score" : { $gt : 80 } 就是 得到 "score" 大於 80 的數據

小於 : 在MongoDB中的 小於 < 號 我們用 : $lt  比如 :  "score" : { $lt : 80 } 就是 得到 "score" 小於 80 的數據

大於等於 : 在MongoDB中的 大於等於 >= 號 我們用 : $gte  比如 :  "score" : { $gte : 80 } 就是 得到 "score" 大於等於 80 的數據

小於等於 : 在MongoDB中的 小於等於 <= 號 我們用 : $lte  比如 :  "score" : { $lte : 80 } 就是 得到 "score" 小於等於 80 的數據

二.MongoDB的update修改器: $inc $set $unset $push $pull

在此前的update中,我們用過$set,對數據進行過更新,其實在update中還存在很多的$關鍵字,我們把update中的這些關鍵字叫做修改器

1.$inc : Python中的  變量 += 1 , 將查詢到的結果 加上某一個值 然后保存

還是剛才Collection數據,我們來試一下$inc , 讓不及格的 "路飛學城2" 變成 60 分

成功了 , {$inc:{"score":1}}的意思是,"score"的原有數值上面 +1,那我們再來實驗一次,把60改為20,這怎么操作呢,其實可以理解為在 60 上加一個 -40

2.$set : 此前我們已經提到過 $set 的用法和特性(沒有就自動添加一條)了

再做一個例子:把 "score" 為 100 分 的 "english_name" 賦值為 "LuffyCity"

再把 "score" 為 20 分的 "score" 賦值為 59 分

3.$unset : 用來刪除Key(field)的

做一個小例子 : 剛才我們有一個新的"english_name" 這個field ,現在我們來刪除它

4. $push : 它是用來對Array (list)數據類型進行 增加 新元素的,相當於我們大Python中 list.append() 方法

做一個小例子 :首先我們要先對原有數據增加一個Array類型的field:

使用update $set 的方法只能為Document中的第一條添加

使用updateMany $set 的方法 可以為所有滿足條件的 Document 添加 "test_list" , 注意我這里的條件為空 " {} " 就算是為空,也要寫上"{}" 記住記住記住

接下來我們就要隊列表進行添加了: 將 "score" 為 100 的Document 中"test_list" 添加一個 6

$push 是在 Array(list) 的尾端加入一個新的元素  {$push : {"test_list" : 6}}

5.$pull : 有了$push 對Array類型進行增加,就一定有辦法對其內部進行刪減,$pull 就是指定刪除Array中的某一個元素

做一個例子: 把我們剛才$push進去的 6 刪除掉

問題來了,如果 Array 數據類型中 如果有 多個 6 怎么辦呢?

全部刪掉了...

得出了一個結論,只要滿足條件,就會將Array中所有滿足條件的數據全部清除掉

6. $pop : 指定刪除Array中的第一個 或 最后一個 元素

做個小例子: 刪除"score" 等於 100 分  test_list 的最后一個元素

怎么刪除第一個呢?

{$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后邊 (這和我們大Python正好相反) 

三.MongoDB 之 "$" 的奇妙用法

在MongoDB中有一個非常神奇的符號 "$"

"$"  在 update 中 加上關鍵字 就 變成了 修改器

其實 "$" 字符 獨立出現也是有意義的 , 我起名叫做代指符

首先看個例子: 還是這個Collection

現在把 "score": 100 的 test_list 里面的 2 改為 9

{$set :{"test_list.0" : 9}} 這樣就是對應 Array 中的下標進行修改了 "test_list.下標"

問題來了 如果 是 一個很長很長很長的 Array 你要查找其中一個值,把這個值修改一下怎么整呢?

$ 字符 在語句中代表了什么呢? 下標,位置      表示2在text_list中的索引

解釋一下: 首先我們查詢一下db.Oldboy.findOne({"score":100,"test_list":3}) 返回 給我們滿足條件的數據對吧

那么 如果 我們 使用 update的話, 滿足條件的數據下標位置就會傳遞到 $ 字符中,在我們更新操作的時候就相當於對這個位置的元素進行操作

四.$的其他用法

查詢$關鍵字:
        $all #滿足所有元素的數據
            db.user.find({'age':{$all:[1,3]}})
        $in    #滿足其中一個元素的數據
            db.user.find({'age':{$in:[1,3]}})
        $or #滿足其中一個字段的數據
            db.user.find({$or:[{name:"yinwangba"},{age:{$gt:70}}]})
       

 limit(x):
        只查詢前x條數據
 skip(x):
        跳過前x條數據
 sort({ id:-1 }):
        根據id字段進行倒序排列:-1  正序排列:1

 

如果三個關鍵字同時出現,有優先級
1.sort   2.skip   3.limit

五:MongoDB之Array Object 的特殊操作

相比關系型數據庫, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比較特殊的類型了

特殊在哪里呢?在他們的操作上又有什么需要注意的呢?

那我們先建立一條數據,包含 Array 和 Object 類型

db.Oldboy.insert({"name":"路飛學城-騎士計划","price":[19800,19500,19000,18800],"other":{"start":"2018年8月1日","start_time":"08:30","count":150}})

{
    "_id" : ObjectId("5b17d01a49bf137b585df891"),
    "name" : "路飛學城-騎士計划",
    "price" : [
        19800,
        19500,
        19000,
        18800
    ],
    "other" : {
        "start" : "2018年8月1日",
        "start_time" : "08:30",
        "count" : 150
    }
}

一.Array

1.把price 中 19000 改為 19300

db.Oldboy.update({"name":"路飛學城-騎士計划"},{$set:{"price.2":19300}})

我們用了引用下標的方法更改了數值 , "price.2"代指的是 Array 中第3個元素

2. 混合用法

如果 price.1 中小於19800 則加 200

db.Oldboy.update({"name":"路飛學城-騎士計划","price.1":{$lt:19800}},{$inc:{"price.1":200}})

我們把 price 小於 19500  的 自動補上 200

db.Oldboy.updateMany({"name":"路飛學城-騎士計划","price":{$lt:19500}},{$inc:{"price.$":200}})

細心的同學已經發現了,只改了第一個,是的 $ 這個只儲存一個下標,批量更改的話,

你只要把這個Array 拿出來,在程序里面改完,原方不動的放回去不就搞定了嗎

二.Object 

1.把other中 count 改為 199

db.Oldboy.update({"name":"路飛學城-騎士計划"},{$set:{"other.count":199}})

對了就是在這個對象 打點兒 key 就可以更改數值了 , 要注意的是, 咱們用的 $set 進行修改的,那么就意味着,如果沒有"other.count"這個field的話,他會自動創建

2.混合用法

如果 count 小於 200 那么 加 10

三. Array 套 Object 

首先,我們要先建立一條 Document 

{
    "_id" : ObjectId("5b17de9d44280738145722b9"),
    "name" : "路飛學城-騎士計划",
    "price" : [
        {
            "start" : "2018年8月1日",
            "start_time" : "08:30",
            "count" : 150
        },
        {
            "start" : "2018年8月2日",
            "start_time" : "09:30",
            "count" : 160
        },
        {
            "start" : "2018年8月3日",
            "start_time" : "10:30",
            "count" : 170
        },
        {
            "start" : "2018年8月4日",
            "start_time" : "11:30",
            "count" : 180
        }
    ]
}

1.把count 大於 175 的field  加 15

2. 把 count 大於 180 的 start 改為 "2018年8月10日"

四. Object  套  Array

db.user.updateOne({"kecheng.class":15},{$set:{"kecheng.class.$":20}})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM