MongoDB入門系列(二):Insert、Update、Delete、Drop

来源:https://www.cnblogs.com/chenmh/archive/2017/12/29/8144798.html
-Advertisement-
Play Games

概述 本章節介紹Insert、Update、Delete、Drop操作基本語法。 環境: Version:3.4 insert insert()基本語法如下: db.collection.insert( <document or array of documents>, { writeConcern ...


概述  

本章節介紹Insert、Update、Delete、Drop操作基本語法。

 

環境:

Version:3.4

insert

insert()基本語法如下:

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

1.單條插入

db.person.insert({"age":10})

2.多條插入

使用文檔數組作為參數,不過註意批量插入也會存在長度的限制

db.person.insert([{"age":11},{"age":12}])

3.錯誤的語法:

db.person.insert({"age":11},{"age":12})

只有age:11被插入進去,由於接收的插入文檔不是數組

容易誤導的地方:

db.person.insert([{"age":11},{"age":12}])

db.person.insert({"name":11,"age":12})

db.person.insert({"age":11,"age":12})

第一個插入是插入兩個文檔,第二個插入是插入一個文檔,第三個雖然也是一個文檔但是由於鍵重覆,所以只有後一個值會被插入age:12

delete

remove() 方法的基本語法格式如下所示:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }

參數說明:

  • query :(可選)刪除的文檔的條件。
  • justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。
  • writeConcern :(可選)拋出異常的級別。

1.刪除num大於100的數據

db.new.remove({"num":{$gt:100}});

2.刪除new集合所有數據

db.new.remove({});

3.刪除num等於100的數據

db.new.remove({"num":100})

4.測試刪除速度

var timeRemoves = function(){

    var start =(new Date()).getTime();

    db.new.remove({'num':{$gt:100}});

    db.new.findOne();

    var timediff= (new Date()).getTime() - start;

    print("removeTimes: "+timediff+"ms")

}

timeRemoves()

update

update() 方法用於更新已存在的文檔。語法格式如下:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

參數說明:

  • query : update的查詢條件,類似sql update查詢內where後面的。
  • update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
  • upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
  • multi : 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
  • writeConcern :可選,拋出異常的級別。

例:

db.person.insert([{"name":"chen","age":15},{"name":"li","age":20},{"name":"zhang","age":20}]);

$ set修改符

用於修改鍵的值,如果鍵不存在就增加鍵

//將age=10的數據改成15,預設如果age=10的有多條記錄只更新第一條

db.person.update({"name":"li"},{$set:{"age":10}})

//更新多個滿足條件的值,同時如果更新的值不存在就插入更新的值,註意:這裡插入的值是20不是30

db.person.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true})

可以省略multi,upsert,這裡不能有花括弧,但是不建議這樣做

db.person.update({"age":30},{$set:{"age":20}},true,true)

//值更新為數組

db.person.update({"name":"zhang"},{$set:{"age":[10,12,14]}},{upsert:true})

//修改為其它的值

db.person.update({"name":"zhang"},{$set:{"age":''}},{upsert:true})

db.person.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})

$inc修改符

用於增加已有鍵的值,如果鍵不存在就創建,只能用於整形、長整型、浮點型。

//將name=zhang的記錄的age鍵+10

db.person.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true})

//將name=zhang的記錄的age鍵-10

db.person.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})

$unset修改符

刪除鍵類似關係資料庫的刪除欄位操作,要區別$set修改符的將鍵設空或者null值

db.person.update({"name":"zhang"},{$unset:{"age":1}})

$push修改符

如果數組已經存在,“$push”會向已有的數組末尾加入一個元素,要是沒有就創建一個新的數組。註意:必須是數組才能加入新的值

db.person.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}});

//再插入一條comments

db.person.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});

$each修改符

向數組中添加元素

db.axc.remove({})

db.axc.insert({"title":1,"list":[1,2,3]})

db.axc.find();

//向list數組中添加單個元素

db.axc.update({"title":1},{$push:{"list":4}})

//向list數組中添加多個元素

db.axc.update({"title":1},{$push:{"list":{$each:[6,7]}}});

db.axc.find();

$addToSet修改符

往數組集中插入元素時,如果元素存在就不插入;方法和$push一樣,唯一的區別就是$push不會判斷重覆值,重覆也可以插入。$addToSet也可以結合$each一起使用方法和$push一樣可以同時往數組中插入多個元素並且如果元素存在則不插入。

db.axc.update({"title":1},{$addToSet:{"list":2}})

db.axc.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});

$pull修改符

匹配數組中的元素將匹配上的元素全部刪除,註意只能對數組中的元素進行匹配

db.lists.insert({"title":1,"list":[1,2,3]});

db.lists.find();

//清除list數組中的元素2

db.lists.update({},{$pull:{"list":2}})

db.lists.find();

$pop修改符

從數組的末端或頭刪除一個元素,$pop:{"list":1}:從末尾刪除一個元素;$pop:{"list":-1}:從開頭刪除一個元素

//向數組list中插入兩個元素

db.lists.update({},{$push:{"list":{$each:[2,4]}}});

db.lists.find()

//從末尾刪除元素

db.lists.update({},{$pop:{"list":1}});

//從開頭刪除元素

db.lists.update({},{$pop:{"list":-1}});

基於位置的數組修改方法

可以有兩種方式來定位數組中的元素:

1.通過下標;數組的下標都是從0開始。

2.通過$定位操作符,

db.comment.insert({"title":1,"comments":[{"comment":"a","author":"chen","age":10},{"comment":"b","author":"wang","age":30},{"comment":"c","author":"zhang","age":40}]});

//將數組中的第一個列表的age值改成20

//方法1:

db.comment.update({},{$set:{"comments.0.age":20}});

//方法2:

db.comment.update({"comments.author":"chen"},{$set:{"comments.$.age":20}});

drop

刪除test集合,註意drop後面的括弧裡面不需要帶花括弧

db.test.drop()

總結

 

 

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題: sudo apt-get install vim E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)E: Unable to lock the administratio ...
  • 前幾天由於工作上的事耽誤了幾天,特來追加更新 第1章 ansible軟體概念說明 python語言是運維人員必會的語言,而ansible是一個基於Python開發的自動化運維工具 (saltstack)。其功能實現基於SSH遠程連接服務;ansible可以實現批量系統配置、批量軟體部署、批量文件拷貝 ...
  • win10點擊滑鼠右鍵調出菜單時,看不到菜單的文字,只顯示了小圖標這種問題的修複方法。 ...
  • 靜態散列要求桶的數目始終固定,那麼在確定桶數目和選擇散列函數時,如果桶數目過小,隨著數據量增加,性能會降低;如果留一定餘量,又會帶來空間的浪費;或者定期重組散列索引結構,但這是一項開銷大且耗時的工作。為了應對這些問題,為此提出了幾種動態散列(dynamic hashing)技術,可擴展動態散列(ex ...
  • 一.資料庫的基本操作 資料庫的安裝以後更新 在Linux系統下: 1.啟動資料庫服務:sudo service mysql start 2.停止資料庫服務:sudo service mysql stop 3.重啟資料庫服務:sudo service mysql restart 4.進入MySQL數據 ...
  • 操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 安裝InfluxDB之後,在/usr/bin下會有如下幾個文件: 下麵簡單介紹下各個工具的使用。 influxd使用方法介紹 該可執行文件為InfluxDB伺服器程 ...
  • 一、Inception簡介一款用於MySQL語句的審核的開源工具,不但具備自動化審核功能,同時還具備執行、生成對影響數據的回滾語句功能。 基本架構: 二、Inception安裝 1、軟體下載 下載鏈接:https://github.com/mysql-inception/inception文檔鏈接: ...
  • 摘要: EagleEye作為阿裡集團老牌的鏈路跟蹤系統,其自身業務雖不在交易鏈路上,但卻監控著全集團的鏈路狀態,特別是在中間件的遠程調用上,覆蓋了集團絕大部分的場景,在問題排查和定位上發揮著巨大的作用,保障了各個系統的穩定性,為整個技術團隊打贏這場戰役保駕護航。 背景 雙十一一直是阿裡巴巴集團每年要 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...