国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - MongoDB的創建、更新和刪除

MongoDB的創建、更新和刪除

2020-05-12 17:28MongoDB教程網 MongoDB

下面開始學習MongoDB最重要也是最基礎的部分:C(創建)R(查詢)U(更新)D(刪除);由于R(查詢)操作相對來說內容比較多,也比較繁瑣,同時使用頻率也比較高,所以下一篇會拿出來單獨介紹。廢話不多說,連上服務器,我

概要

  下面開始學習MongoDB最重要也是最基礎的部分:C(創建)R(查詢)U(更新)D(刪除);由于R(查詢)操作相對來說內容比較多,也比較繁瑣,

  同時使用頻率也比較高,所以下一篇會拿出來單獨介紹。廢話不多說,連上服務器,我們直接進入正題!

一、創建

  按照我們關系型數據庫的思想,一個服務器要想存放數據,首先要有數據庫,表,字段,約束,當然了也少不了主鍵,外鍵,索引,關系等;

  但是在MongoDB的世界里邊,我們不用預先的去創建這些信息從而直接來使用各個屬性。

  1、數據庫(database)

    a)、創建

      use mydb(創建并切換到名稱為mydb的數據庫實例下。注:如果你對其不進行任何操作,該數據庫是沒有任何實際意義的)

  2、集合(collection)

    a)、創建

      我們直接指定,不做任何預處理,指定一個名稱為users的數據集(相當于表),并向其中插入一條用戶數據。

      db.users.insert({ "name" : "wjg" , "age" : 24 })

      返回結果如下,表示你已經成功插入了一條數據:

      WriteResult({ "nInserted" : 1 })

    b)、顯式創建

      僅創建一個名稱為collectionName的,沒有任何大小和數量限制的數據集

      db.createCollection("collectionName")

      如果該數據集有重名,會給出已經存在的提示:

      { "ok" : 0, "errmsg" : "collection already exists", "code" : 48 }

      成功之后會給出ok的提示:

      { "ok" : 1 }

  3、文檔(document)

    a)、單一插入

      注:如果沒有主鍵“_id”,插入文檔的時候MongoDB會為我們自動保存一個進去。

這里我們指定一個“_id”,當然了,“_id”肯定是不能重復的,否則無法插入成功。

      db.users.insert({"_id":0,"name":"jack","age":20})

      成功插入數據之后:

      WriteResult({ "nInserted" : 1 })

    b)、批量插入

      注:一次性插入多個文檔會明顯提高插入速度;

插入文檔的大小限制為48MB;

如果其中有一個文檔插入失敗了,這個文檔之前的都可以插入成功,但是在它之后都會失敗;(不同的驅動可能會有不同的處理方式)

      db.users.insert([{"_id":1,"name":"tom","age":21},{"_id":2,"name":"joe","age":22},{"_id":3,"name":"bob","age":22}])

      批量插入成功之后會返回如下信息:

      BulkWriteResult({

"writeErrors":[],

"writeConcernErrors":[],

"nInserted":3,

"nUpserted":0,

"nMatched":0,

"nModified":0,

"nRemoved":0,

"upserted":[]})

      分別表示的大致意思為:

插入的錯誤信息,其他的插入錯誤信息,插入的文檔數量,特殊更新的文檔數量,匹配到的文檔數量,

更新的文檔數量,移出的文檔數量和特殊文檔更新信息

      特殊的文檔更新(upsert),其定義如下:

如果沒有找到符合更新條件的文檔,就會以這個條件和更新文檔為基礎創建一個新的文檔;如果找到了匹配的文檔,那么就正常更新

二、更新

  想要更新文檔,必須要有兩個參數:

    一個是查詢條件,用于定位到需要更新的目標文檔;另一個是修改器,用于說明要對找到的文檔進行哪些修改

  截至此刻為止,我們已經向mydb數據庫中名稱為users的數據集中添加了如下幾個文檔:

MongoDB的創建、更新和刪除

    a)、單一更新

      讓我們來為名字為bob的年齡增加一歲,直接將年齡更新為23歲

      db.users.update({"name":"bob"},{$set:{"age":23}}) //使用了$set修改器之后,只會更新age自段的值為23

      或者

      db.users.update({"name":"bob"},{"age":23}) //同樣會將age自段的值更新為23,但是會移出除了“_id”和本身之外的所有字段值

      具體詳情如下圖:

MongoDB的創建、更新和刪除

      注:如果需要更新的字段不存在,那么MongoDB會按字段順序進行插入,類似于上邊提到的特殊更新。

其實細心的童鞋會發現,我們都是以name作為條件進行更新,所以并不能保證其唯一性,那么MongoDB只會更新匹配到的第一個文檔。

這里還是建議大家指定一個唯一的文檔進行更新,"_id"可以幫你保證!

    b)、使用選擇器更新(重點)

      1、$set修改器

執行特殊更新操作;可以修改內嵌文檔;甚至可以更改鍵的類型;

Ⅰ、假設需求改了,我們需要為為所有用戶添加一個”hobby“的屬性用于存放用戶的喜好,那么我們可以這樣做:

  db.users.update({},{$set:{"hobby":"read"}}) //這樣做是錯的,哈哈。。

  更新后的文檔如下:

MongoDB的創建、更新和刪除

切記:update方法只會更新它匹配到的第一個文檔對象,所以這個操作只會將名字為”wjg“的用戶添加一個”hobby“屬性,其它對象不會添加

正確方式如下:

db.users.update({},{$set:{"hobby":"write"}},false,true) //第三個參數為是否啟用特殊更新,第四個為是否更新所有匹配的文檔;

這倆參數默認都為false

更新后的文檔如下:

MongoDB的創建、更新和刪除

  可以看到我們成功更新了五個文檔對象

Ⅱ、假設我們需求又變了,老板說了,每個用戶的愛好會有多個。那么簡單,因為我們可以直接將string類型的hobby屬性改成string數組類型的

  db.users.update({"_id":0},{"$set":{"hobby":["write","read","paly ping-pong"]}}) //將_id為0的hobby屬性更新為數組類型的

Ⅲ、然后我們發現tom壓根就沒有愛好,那么我們可以使用$unset修改器將其刪除

  db.users.update({"_id":1},{"$unset":{"hobby":1}}) //1表示徹底刪除這個鍵值對

Ⅳ、現在已經過去一年了,我們是時候把所有用戶的年齡加一歲了。這時$inc上場

  db.users.update({},{"$inc":{"age":1}},false,true) //別忘了將第四個參數置為true

  注:$inc修改器只針對數字類型,如果是string或者其他類型的會提示報錯: 

MongoDB的創建、更新和刪除

      提示無法將$inc應用到非數字類型上,并且給出錯誤位置:”_id“為2的文檔;

      我們將joe的age改為數字類型的重新執行一次,就可以成功啦!

Ⅴ、過了一段時間,jack又喜歡上了游泳,那么我們可以用$push這樣搞:

  db.users.update({"_id":0},{"$push":{"hobby":"swim"}}) //hobby必須是一個數組,所以你在其他文檔上使用是不會成功的

Ⅵ、然而jack不喜歡讀書了,我們就用$pull來移除“read”元素

  db.users.update({"_id":0},{"$pull":{"hobby":"read"}}) //它會移除數組中所有匹配到的“read”元素

  另外:db.users.update({"_id":0},{"$pop":{"hobby":1}}) //表示移除hobby中的最后一個元素,為-1表示移除第一個元素

MongoDB的創建、更新和刪除

  不知道大家有沒有發現,“_id”為0的文檔從第二的位置被移動到了數據集的末尾,這是因為該文檔尺寸變大的原因導致的,

  原先的位置已經容不下它了!

  那么這就引出了另外一個概念:填充因子,它是MongoDB為每個新文檔預留的增長空間。上邊的這種情況就會使填充因子增加。

  移動文檔是一個非常緩慢的操作,盡量讓填充因子的值接近1;

  通過db.users.stats()查看該數據集信息,“paddingFactor”即為填充因子的大小;

三、刪除

  刪除文檔相對來說就簡單了許多

  1、單一刪除

    給定一個查詢參數,只要符合條件的,都會被刪除

    db.users.remove({"_id":{"$lte":1}}) //刪除“_id”的值小于等于1的所有文檔

    返回結果如下:

    WriteResult({"nRemoved":2}) //成功刪除了兩個文檔

  2、清空整個數據集

    db.users.remove()

    如果數據較多的話,用db.users.drop()會明顯提升刪除速度

  注:刪除都是不可逆的,不能撤銷,也不能恢復,所以要謹慎使用;

    清空數據集的時候集合本身并不會被刪除,也不會刪除集合的元信息;

四、未解決問題

  1、先取出來再更新,使用查詢條件取出來的數據都無法用游標去獲取值,但是用findOne獲取的一個文檔對象就可以。。。

MongoDB的創建、更新和刪除

    如果哪位大神知道的話麻煩告訴小弟一下,多謝、、、哈哈。。

  最后一個問題已經找到,原因如下:

    第一個find操作雖然獲取的只是一個文檔對象,看似和下邊用findOne是一樣的效果,但是在MongoDB的shell中第一個的結果集是被默認為多個文檔集合,所以它無法判斷你想獲取的是哪個文檔的age。

延伸 · 閱讀

精彩推薦
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲视频在线观看免费 | 欧美久久久 | 黄色a级 | 久久综合久色欧美综合狠狠 | 精品国产乱码久久久久久影片 | 黄色av网站在线观看 | 99久久精品免费看国产四区 | 一区二区免费看 | 久久精品这里热有精品 | 日韩午夜影院 | 香蕉久久夜色精品国产使用方法 | 亚洲天堂免费在线 | 国产免费自拍 | 亚洲黄网在线观看 | 精品视频在线观看 | 久久久久国产一级毛片高清片 | 中文字字幕一区二区三区四区五区 | 91精品久久久久久久久 | 中文字幕免费观看 | 免费av在线播放 | 久久久久久久久久久久久av | 亚洲一区二区三区在线 | 中文字幕亚洲一区二区三区 | 黄色美女视频网站 | 日韩视频在线观看 | 亚洲成人播放器 | 99精品欧美一区二区三区综合在线 | av片免费 | 午夜在线视频 | 91精品国产综合久久福利软件 | 2020国产在线 | 99er视频| 一区在线视频 | 欧美国产精品一区二区三区 | 国产精品一区三区 | 丝袜久久 | 久久久综合网 | 操操操操操操操 | 国产精品99久久 | 亚洲精品一区二区三区在线播放 | 欧美一区二区在线播放 |