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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mongoDB操作详细

發布時間:2023/11/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongoDB操作详细 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

它和我們使用的關系型數據庫最大的區別就是約束性,可以說文件型數據庫幾乎不存在約束性,理論上沒有主外鍵約束,沒有存儲的數據類型約束等等

關系型數據庫中有一個 "表" 的概念,有 "字段" 的概念,有 "數據條目" 的概念

MongoDB中也同樣有以上的概念,但是名稱發生了一些變化,嚴格意義上來說,兩者的概念即為相似,但又有些出入,不過無所謂,我們就當是以上概念就好啦

數據結構

MongoDB的每個表(Collection)中存儲的每條數據(Documents)都是一個一個的Json,Json中的每一個字段(Key)我們稱之為:Field

就此我們引出了三個關鍵字,Collection也就是關系型數據庫中"表"的概念,Documents就是"數據條目",Field就是"字段"

軟件安裝

本博客基于MongoDB 3.4進行演示,小伙伴們自行去下載一個,點擊下一步下一步安裝完成后,加入MongoDB的bin文件中,復制文件路徑并添加到環境變量中,這個時候打開cmd輸入mongod進行測試

那我們就在C:下面創建一個data文件夾,里面再創建一個db文件夾

再啟動服務發現OJBK了

我們再開啟一個cmd窗口去鏈接我們開啟的mongod服務,發現能夠正確連上了。這里需要記住的小小知識點有,常用數據庫軟件的默認端口號

MySQL:3306

Redis:6379

MongoDB:27017

提醒一下,在操作mongoDB數據庫的時候,你可千萬別把剛剛啟動的mogond窗口關了哈,那就相當于是數據庫服務器,你叉了就GG了,恭喜再來一次了就!

MongoDB中的增刪改查

在開始之前需要介紹一下MongoDB獨有的特點:使用不存在的對象即創建該對象到內存,如果對創建的對象進行了增加數據操作,那么就會在數據庫中真真實實,明明白白的自動幫我們創建出來(這一特性對數據的操作依然有效,即操作數據沒有的字段,那么就會給該數據新增這一字段)

插入數據的方式有插入單挑和插入多條兩種(insertOne insertMany)

insertOne: 插入一條數據,官方推薦

insertMany:插入多條數據,無需參數控制,官方推薦,多條數據用[]包裹,這個更普遍的叫法是array,而不是我們python里面的列表,將列表別人可能不懂,但是你講array那肯定能懂

介紹完增刪改查你就會發現,只有查有點特殊,

查詢多條find后面不跟Many

查詢單條findOne

修改一條updateOne({})

這里就展示了開頭我們說的mongodb的特殊性,使用不存在的對象就自動給你創建,至于上面出現的$set后面再介紹

修改多條數據updateMany({})

remove({}):無條件刪除數據,這里要注意了,這是刪除所有數據,清空Collection

MongoDB數據結構

Object ID :Documents 自生成的 _id

String: 字符串,必須是utf-8

Boolean:布爾值,true 或者false (這里有坑哦~在我們大Python中 True False 首字母大寫)

Integer:整數 (需要注意的是mongoDB中出現的數字默認都是Double類型而不是整型)

Double:浮點數 (沒有float類型,所有小數都是Double)

Arrays:數組或者列表,多個值存儲到一個鍵 (list哦,大Python中的List哦)

Object:如果你學過Python的話,那么這個概念特別好理解,就是Python中的字典,這個數據類型就是字典

Null:空數據類型 , 一個特殊的概念,None Null

Timestamp:時間戳

Date:存儲當前日期或時間unix時間格式 (我們一般不用這個Date類型,時間戳可以秒殺一切時間類型)

看著挺多的,但是真要是用的話,沒那么復雜,很簡單的哦

?1.Object ID:

"_id" : ObjectId("5b151f8536409809ab2e6b26")#"5b151f85" 代指的是時間戳,這條數據的產生時間 #"364098" 代指某臺機器的機器碼,存儲這條數據時的機器編號 #"09ab" 代指進程ID,多進程存儲數據的時候,非常有用的 #"2e6b26" 代指計數器,這里要注意的是,計數器的數字可能會出現重復,不是唯一的 #以上四種標識符拼湊成世界上唯一的ObjectID #只要是支持MongoDB的語言,都會有一個或多個方法,對ObjectID進行轉換 #可以得到以上四種信息#注意:這個類型是不可以被JSON序列化的

這是MongoDB生成的類似關系型DB表主鍵的唯一key,注意中說了,這個ID不能被序列化,那么我們該如何傳輸呢?一會介紹pymongo的時候會給出答案!

2.Date:

"_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),"name" : "Hello","date" : ISODate("2018-06-05T15:28:33.705+08:00")

一般不用,而是用ISODate.valueof()直接是時間戳格式,到哪都好使

MondoDB中的$相關

一.查詢中常見的 等于 大于 小于 大于等于 小于等于

等于 : 在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中的運算符,是不是很類似我們使用的ORM中的運算符啊,沒錯,最開始的時候我們就已經說了,MongoDB的操作就是很類似ORM的

二.MongoDB中的那些個update修改器: $inc $set $unset $push $pull

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

?{$inc:{"score":1}}的意思是,"score"的原有數值上面 +1,$inc 的用法是不是很簡單啊,就是原有基礎上在增加多少對吧

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

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

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

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

成功了! {$unset:{"english_name" : 1}} 就是刪除 "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 中 加上關鍵字 就 變成了 修改器

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

針對object操作

前面的price.price表示的是price這個字段下的所有含有price鍵的數據值,后面的price.$指的就是找到的array下表對應的y一行數據{},再.字段拿到鍵對應的值

MongoDB中的限制查詢條數

1. Limit 選取 : 我要從這些 Document 中取出多少個

做個小例子 : 我只要 2 條 Document

2.Skip 跳過 : 我要跳過多少個Document

做個小例子 : 我要跳過前兩個 Document 直接從第三個Document 開始

3.Limit + Skip : 從這兒到那兒 的 選取

就是剛才的問題,一個小例子 : 我只想要第二條和第三條怎么處理呢

4. Sort 排序 : 將結果按照關鍵字排序

做個小例子 : 將find出來的Document 按照 price 進行 升序 | 降序 排列

國際慣例 : 按照 price 字段進行升序 , 1 為升序 , -1 為降序

5. Limit + Skip + Sort 混搭來一把

一個例子 : 選取第二條第三條 并 按照 price 進行 升序排列

問題出現了, 按道理不應該是 9800 然后 19800 嗎?

知識點來嘍

重點 : Sort + Skip + Limit 是有執行優先級的 他們的界別分別是 優先 Sort? 其次 Skip 最后 Limt

Skip + Limit 的優先級 也是先 Skip 再 Limit

?

看一次,記不住

看兩次,不會用

看三次,不如自己做一次

做一次,不如做三次

?

練習一下加深印象

轉載于:https://www.cnblogs.com/Dominic-Ji/p/9524079.html

總結

以上是生活随笔為你收集整理的mongoDB操作详细的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。