MongoDB學習(操作集合中的文檔)

来源:https://www.cnblogs.com/shangyang/archive/2019/04/05/10649786.html
-Advertisement-
Play Games

mongodb對集合文檔的操作,添加文檔、查看文檔、刪除文檔、更新文檔及常用的局部更新運算符 ...


文檔概念

  文檔的數據結構和JSON基本一樣。

  所有存儲在集合中的數據都是BSON格式。

  BSON是一種類json的一種二進位形式的存儲格式,簡稱Binary JSON。

 

插入文檔

insert()方法

  要將數據插入到 MongoDB 集合中,可以使用 insert() 方法。

db.collection_name.insert(document)

  

  其中test為集合名。如果資料庫中不存在集合,則MongoDB將創建此集合,並將文檔插入到該集合中。

  在插入的文檔中,如果不指定 _id 參數,MongoDB會為此文檔分配一個唯一的Object_id。

  _id 為集合中的每一個文檔的12個位元組的十六進位數。12 位元組劃分為:

id: ObjectId( 4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)

 

  要在單個語句中插入多個文檔,可以在 insert() 命令中傳遞文檔數組。

1 > db.test.insert([
2 ... {name:"uzi",
3 ... like:["MongoDB","JAVA","Database"],
4 ... },
5 ... {name:"957",
6 ... parents:[{
7 ... father:"letme",
8 ... mather:"mlxg"}],}])
添加代碼

save()方法

  要插入文檔,也可以使用 db.collection_name.save() 方法。與 insert() 方法不同的是,當輸入的id值相同時, insert() 方法無法插入,但 save() 方法會更新包含 該 id 值的文檔的全部數據。

insertOne()方法

  db.collection_name.insertOne() 方法將單個文檔插入到集合中。如果沒有指定 _id ,MongoDB會自動將添加。

  該方法會返回包含新插入的文檔的 ”_id"欄位值的文檔。

insertMany()方法

  db.collection_name.insertMany() 方法可以將多個文檔插入到集合中。如果沒有指定 _id,則自動添加ObjectId

更新文檔

更新運算符

  在MongoDB中進行更新操作時,可以使用運算符進行文檔數據的局部修改。

運算符 描述 語法
$set 更新欄位的值,如果欄位不存在則進行添加 { $set : { field : value } }
$inc 

將欄位值增加指定的量

{ $inc : { field : value } }

$rename

重命名欄位名(鍵名)

{ $rename : { field : value } }

$unset

刪除指定的欄位(鍵)

 { $unset : { field : "1" } }
$setOnInsert

在更新操作中新建文檔時設置欄位的值

{ $setOnInsert : { field : value } }
$addToSet

在已有數組中添加元素,如果元素存在則不操作

{ $addToSet : { field : value } }
$pop

刪除數組的第一個或最後一個元素。如果值為“-1",則刪除第一個元素;

如果值為”1",則刪除最後一個元素。

{ $pop : { field : value } }
$push

1.如果指定的鍵是數組則追加新的值;

2.如果指定的鍵不是數組則無法成功執行

3.如果不存在指定的欄位(鍵)則創建數組類型的鍵值對

{ $push : { field : value } }
$pushAll

用法與 $push 類似,一次可以添加多個值到數組

{ $pushAll : { field : [ value1,value2,...] } }
$pull

從數組中刪除指定值

{ $pull : { field : value } }
$pullAll

從數組中刪除多個值,要刪除的值是以數組指定的

{ $pullAll : { field : [ value1,value2,...] } }
$each

用於運算符$push和$addToSet 的限定符,用於在數組中添加多個單獨的元素,防止直接添加進數組元素

 field : { $each : [ value1,...] }
$slice

用於運算符 $push 的限定符,用於限制更新後的數組長度

field : { $slice : < num > }
$sort

用於運算符 $push 的限定符,用於將數組中的文檔重新排序

 
$bit

對整數值執行按位與和或運算。

 

更新方法 update()

  Collection 對象的 update() 方法可以更新集合中的文檔。

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

   參數說明:

  •   query:查詢條件,類似sql update查詢內where後面的條件。
  •   update:要更新的內容和一些更新的操作符(如 $set...)等,類似sql update查詢內set後面的參數。
  •   upsert:可選。參數upsert是個布爾值,如果為 true 且沒有文檔與查詢匹配,則插入一個新文檔;如果為 false 則不插入。 預設為 false。
  •   multi:可選。mongodb 預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來的多條記錄全部更新。
  •   writeConcern:可選。拋出異常的級別。

  註意:如果不使用運算符,則update內容不會進行局部修改,而是全局修改。

  示例:

    

 1 #將name為uzi的學生的age加5
 2 db.student.update({name:"uzi"},{$inc:{age:5}})
 3 
 4 #把uzi的sex改為boy
 5 db.student.update({name:"uzi"},{$set:{sex:"boy"}})
 6 
 7 #把uzi的like欄位刪除
 8 db.student.update({name:"uzi"},{$unset:{like:1}})
 9 
10 #給uzi的添加別名dog
11 db.student.update({name:"uzi"},{$push:{aname:"dog"}})
12 
13 #給uzi添加多個別名
14 db.student.update({name:"uzi"},{$pushAll:{aname:["A1","A2"]}})
15 
16 #給uzi的別名數組裡再添加一個數組
17 db.student.update({name:"uzi‘},{$addToSet:{aname:["A3","A4"]}})
18 
19 #刪除別名數組內第一個別名
20 db.student.update({name:"uzi"},{$pop:{aname:-1}})
21 
22 #刪除別名 A2
23 db.student.update({name:"uzi"},{$pull:{aname:"A2"}})
局部更新語句示例

save() 方法

  save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:

    db.collection.save(    
        <document>,     
        {      
            writeConcern: <document> 
        }  
    )  
  •   document:文檔數據
  •   writeConcern:可選。拋出的異常級別。

  無需指定query和update對象,直接將新文檔替換掉原來的舊文檔。它通過文檔中的_id欄位確定要修改的欄位。

  如果集合中沒有與傳入文檔的_id欄位值相等的文檔,則會添加新的文檔。

  save() 函數的執行效率要低於update()。

 

查看文檔

  查看集合中的文檔,可以使用find()方法。

  db.collection_name.find() 可以以非結構化的方式顯示集合中的所有文檔。

  db.collection_name.find().pretty() 可以以結構化的方式顯示集合中的所有文檔。

 

刪除文檔

  remove()函數可以用來刪除集合中的文檔。

    db.collection_name.remove(     
        <query>,     
        {       
            justOne: <boolean>,
            writeConcern: <document> 
        } 
    )
  •   query:可選。刪除的文檔的條件。
  •   justOne:可選。如果為true 或 1,則只刪除一個文檔。預設為false。
  •   writeConcern:可選。拋出異常的級別。

  示例:

  註意:如果要刪除集合中的全部文檔,可以使用

db.collection_name.remove({})

 


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

-Advertisement-
Play Games
更多相關文章
  • 日常編程中經常用到++i與i++,知識點雖然很小,但有時候會犯迷糊,在這裡小小的記錄一下。 ++i 即前遞增,顧名思義也就是先自增後傳值; 舉個慄子 此時i的值為6,j的值也為6。 i++即後遞增,顧名思義也就是先傳值後自增 舉個慄子 此時i的值為6,j的值為5。 ...
  • 一丶前言 看過一些描述關於AOP切麵編程的文章,寫的太概念化讓人很難理解,下麵是我自己的理解,希望能幫到新人,如有錯誤歡迎指正。 二丶AOP是什麼,它的應用場景是什麼? AOP也跟IOC,OOP這些思想一樣它只是一種編程思想。Autofac、Spring.Net、Castle這些組件實現了AOP切麵 ...
  • [TOC] 一、進程相關的概念 進程需要瞭解 進程,父進程,進程組,會話和控制終端的相關概念。 1. 進程和父進程:每個進程都有父進程,而所有的進程以init進程為根,形成一個樹狀結構 2. 進程組:每個進程都會屬於一個進程組(process group),每個進程組中可以包含多個進程。進程組會有一 ...
  • SSH服務與tcp wrappers實驗 實驗環境: 一臺linux(ssh client) 一臺linux(ssh server) 實驗步驟: 1.配置IP,測試連通性 2.在客戶端創建用戶yuzly1,登錄創建的用戶,用公鑰生成工具生成公鑰,#註意記得輸入私鑰密語,不設置預設為空 3.查看生成的 ...
  • FTP是有兩種數據連接模式的,主動模式和被動模式。 PORT(主動)方式:客戶端向伺服器的FTP埠(預設是21)發送連接請求,伺服器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT命令告訴伺服器:“我打開了XXXX埠,你過來連接我”。於是伺服器從20埠向客戶端的XXX ...
  • Laravel 提供了很多 輔助函數,有時候我們也需要創建自己的輔助函數。 這裡介紹了 tinker,一個laravel內置的php互動式控制台,方便調試php代碼 php artisan tinker 我們把所有的『自定義輔助函數』存放於 bootstrap/helpers.php 文件中 首先 ...
  • 背景 現有一個交易系統,每次交易都會更新餘額。出賬扣減餘額,入賬增加餘額。為了保證資金安全,餘額發生扣減時,需要比較現有餘額與扣減金額大小,若扣減金額大於現有餘額,扣減餘額不足,扣減失敗。 餘額表( 省去其他欄位 )結構如下: sql CREATE TABLE ( bigint(20) NOT NU ...
  • 1、編輯一個mysql啟動文件。 在終端裡面輸入: 2、輸入啟動文件內容: 上面xml中的 /usr/local/Cellar/mysql/5.7.20/bin/mysqld_safe 為我的mysql所在目錄。 這個是通過homebrew下載的mysql。 官方下載的路徑為 /usr/local/ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...