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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397121.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397121.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 存儲過程 on_MySQL存儲過程的權限問題小結

MySQL的存儲過程&#xff0c;沒錯&#xff0c;看起來好生僻的使用場景。問題源于一個開發同學提交了權限申請的工單&#xff0c;需要開通一些權限。本來是一個很正常的操作&#xff0c;但在我來看是比較著急且緊迫的&#xff0c;說來慚愧&#xff0c;忙著方向規劃和開發的事情&…

搜索引擎蜘蛛爬蟲原理

permike 原文 搜索引擎蜘蛛爬蟲原理 關于搜索引擎的大話還是少說些&#xff0c;下面開始正文搜索引擎蜘蛛爬蟲原理&#xff1a; 1 聚焦爬蟲工作原理及關鍵技術概述 網絡爬蟲是一個自動提取網頁的程序&#xff0c;它為搜索引擎從Internet網上下載網頁&#xff0c;是搜索引擎的重…

《Android開發藝術探索》讀書筆記 (10) 第10章 Android的消息機制

第10章 Android的消息機制 10.1 Android消息機制概述 (1)Android的消息機制主要是指Handler的運行機制&#xff0c;其底層需要MessageQueue和Looper的支撐。MessageQueue是以單鏈表的數據結構存儲消息列表但是以隊列的形式對外提供插入和刪除消息操作的消息隊列。MessageQueue只…

mysql索引引擎_mysql搜索引擎和索引那些事

mysql的存儲引擎三種存儲方式**InnoDB **(默認)一個文件存儲表結構&#xff0c;一個存儲數據和目錄(索引)# 一個文件 book_name | author| press | price | pub_date frm文件 frame的縮寫# 另一個文件(數據 目錄)# | 倚天屠龍記 | egon | 北京工業地雷出版社 | 70.00 | 2019-07…

SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

【題目分析】 Matrix-Tree定理高斯消元 求矩陣行列式的值&#xff0c;就可以得到生成樹的個數。 至于證明&#xff0c;可以去看Vflea King&#xff08;炸樹狂魔&#xff09;的博客 【代碼】 #include <cmath> #include <cstdio> #include <cstring> #include…

深度ip轉換器手機版app_房串串經紀人版app下載-房串串經紀人版app手機版 v1.0.0...

房串串經紀人版app&#xff1a;專門為房產經紀人打造的輔助辦公軟件&#xff0c;提供的功能非常的全面&#xff0c;涵蓋了房產服務過程中的各個環節&#xff0c;隨時可以手機在線處理自己的日常工作&#xff0c;提高了工作的效率&#xff0c;操作很簡單&#xff0c;讓你更好的實…

netduino之電源參考電路MC33269DT-5.0G

手里有塊netduino的板子&#xff0c;一直閑置未用&#xff0c;netduino具體是什么不知道的就百度吧&#xff0c;我這也不是主要講netduino開發的&#xff0c;簡單說就是用.net開發硬件&#xff0c;了解到netduino也是原來學過C#&#xff0c;當然我主要的工作還是嵌入式硬件開發…

漢王考勤 連接mysql_漢王考勤管理軟件打開時出現:連接數據錯誤,請確認數據庫服務器信息是否有誤。這樣該怎樣解決?...

漢王指紋考勤系統故障答疑1. 考勤鐘上的指紋記錄丟失了。答&#xff1a;沒有可能自己丟失&#xff0c;只可能是誤刪除了指紋信息&#xff0c;只能重新登錄指紋。2. 在預處理時時間過長。答&#xff1a;由于用戶單位的人員多&#xff0c;軟件設置的班次亂等因素造成&#xff1b;…

PowerShell使用教程

一、說明 1.1 背景說明 個人對PowerShell也不是很熟悉&#xff0c;開始的時候就突然看到開始菜單中多了個叫PowerShell的文件夾&#xff0c;后來一點就看到某個教程視頻說PowerShell很厲害但也沒怎么聽&#xff0c;再后來就看到kali也有了一些PowerShell的腳本這才意識到PowerS…

python Gunicorn

1. 簡介 Gunicorn(Green Unicorn)是給Unix用的WSGI HTTP 服務器&#xff0c;它與不同的web框架是非常兼容的、易安裝、輕、速度快。 2. 示例代碼1 def app(environ, start_response):data b"Hello World\n"start_response("200 OK", [("Content-Type…

如何使處于不同局域網的計算機實現遠程通信_小區自來水二次加壓泵站遠程監控系統方案...

一、小區自來水二次加壓泵站遠程監控系統方案項目概述隨著城市高效快速地發展&#xff0c;市區規模越來越大&#xff0c;小區二次加壓泵房將繼續增加&#xff0c;供水公司二次加壓泵房管理工作將更加繁重。目前小區二次加壓供水方式主要有兩種&#xff0c;一種是不銹鋼水箱不銹…

Java中的Enum的使用與分析

示例&#xff1a; public enum EnumTest {FRANK("The given name of me"),LIU("The family name of me");private String context;private String getContext(){return this.context;}private EnumTest(String context){this.context context;}public sta…

postgresql返回行數_怎么優化你的SQL查詢?以PostgreSQL為例

實際工作中&#xff0c;我們每個人難免都會要寫SQL&#xff0c;執行SQL&#xff0c;但是有時時候執行非常慢&#xff0c;甚至獲得不了結果。這時候你會怎么辦&#xff1f;放棄&#xff1f;去苦口婆心的求隔壁房間胡子擦擦的猥瑣DBA大叔&#xff1f;NO&#xff0c;正確方法是先檢…

首次構建android studio gradle 下載緩慢的問題

1、先使用其他工具下載gradle&#xff0c; https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 2、然后放在C:\Users\Administrator\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv 目錄中 隨機碼文件夾可以通過先嘗試構建&#xff0c;讓…

288. Unique Word Abbreviation

題目&#xff1a; An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations: a) it --> it (no abbreviation)1 b) d|o|g --> d…

jqgrid mysql 分頁_jQgrid 分頁顯示

當使用jqgrid去顯示數據的時候&#xff0c;如果數據太多&#xff0c;那么jqgrid就會繪制的很慢&#xff0c;這樣很影響用戶的體驗&#xff0c;十分影響用戶的心情&#xff0c;所以我們采用分頁的方式去取數據&#xff0c;這樣就能避免用戶長時間的等待&#xff0c;從而提升用戶…

echarts 詞云_python Flask+爬蟲制作股票查詢、歷史數據、股評詞云網頁

自學python的數據分析&#xff0c;爬蟲后&#xff0c;花了幾天時間看視頻學習Flask做了一個簡單的股票查詢網頁。本來還想著加入一些其他功能&#xff0c;比如財務指標分析&#xff0c;輿情分析&#xff0c;最完美的想法是做成一個股票評分系統&#xff0c;輸入股票代碼可以自動…

JavaSE基礎知識(6)—異常和異常處理

一、異常的理解及體系結構圖 1、理解 異常&#xff1a;程序運行過程中發生的不正常現象。java中的錯誤&#xff1a;   語法錯誤   運行異常   邏輯錯誤 2、體系圖 java程序在執行過程中所發生的異常分為兩類&#xff1a; Error&#xff1a;Java虛擬機無法解決的嚴重問題。…

peripheralStateNotificationCB

1 /*********************************************************************2 * fn peripheralStateNotificationCB 外圍設備 狀態 通知 回調函數3 *4 * brief Notification from the profile of a state change. 通知來自于profile的狀態改變&#xff01;5 *6 * …

mysql dump 1017_MySQL數據庫導出 - Can't Wait Any Longer - OSCHINA - 中文開源技術交流社區...

本文內容主要來自MySQL官方文檔&#xff1a;“MySQL5.1 Reference&#xff0c;2.10.3. 將MySQL數據庫拷貝到另一臺機器”注意&#xff1a;參數名與值間可以不用空格&#xff0c;如-uroot或-u root均可&#xff1b;某些參數會有不同含義1.數據庫導出(-A導出所有數據庫&#xff0…