[mongo] {第二部分}mongoDB CRUD v1

      網友投稿 788 2025-04-05

      CRUD操作可create,?read,?update和delete??documents。

      create

      創建或插入操作會將新documents添加到collection中。如果該集合當前不存在,則插入操作將創建該集合。

      MongoDB提供了以下將文檔插入集合的方法:

      db.collection.insertOne()?3.2版中的新功能

      db.collection.insertMany()?3.2版中的新功能

      在MongoDB中,插入操作的目標是單個collection。MongoDB中的所有寫操作在單個文檔級別上都是原子性的?。

      Insert

      插入一個文檔

      db.collection.insertOne()將單個?文檔插入集合中。

      以下示例將一個新文檔插入到?inventory集合中。如果文檔未指定_id字段,則MongoDB將_id具有ObjectId值的字段添加到新文檔中。

      db.inventory.insertOne( { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } } )

      insertOne()返回包含新插入的文檔的_id字段值的文檔。

      要檢索剛剛插入的文檔,請查詢集合:

      db.inventory.find( { item: "canvas" } )

      插入多個文檔

      3.2版中的新功能。

      db.collection.insertMany()可以將多個?文檔插入一個集合中。將文檔數組傳遞給該方法。

      下面的示例將三個新文檔插入到?inventory集合中。如果文檔未指定?_id字段,則MongoDB將_id具有ObjectId值的字段添加到每個文檔。

      db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } }, { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } }, { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } } ])

      Insert Behavior

      如果該集合當前不存在,則插入操作將創建該集合。

      在MongoDB中,存儲在集合中的每個文檔都需要一個唯一的?_id字段作為主鍵。如果插入的文檔省略了該_id字段,則MongoDB會自動為該字段生成一個ObjectId_id。

      這也適用于通過upsert:true通過更新操作插入的文檔。

      MongoDB中的所有寫操作都是單個文檔級別的原子操作。

      對于寫問題,您可以指定MongoDB向寫操作請求的確認級別。

      [mongo] {第二部分}MongoDB CRUD v1

      Insert Methods

      MongoDB提供了以下將文檔插入到集合中的方法:

      db.collection.insertOne()

      插入單個文檔到集合中

      db.collection.insertMany()

      db.collection.insertMany()?插入多個文檔到集合中

      db.collection.insert()

      db.collection.insert()插入單個或多個文檔到集合中

      以下方法還可以將新文檔添加到集合中:

      db.collection.update()?when used with the?upsert:?true?option.

      db.collection.updateOne()?when used with the?upsert:?true?option.

      db.collection.updateMany()?when used with the?upsert:?true?option.

      db.collection.findAndModify()?when used with the?upsert:?true?option.

      db.collection.findOneAndUpdate()?when used with the?upsert:?true?option.

      db.collection.findOneAndReplace()?when used with the?upsert:?true?option.

      db.collection.save().

      db.collection.bulkWrite().

      See the individual reference pages for the meth

      查詢

      讀取操作從?集合中檢索文檔;?即查詢文檔集合。MongoDB提供了以下方法來從集合中讀取文檔:

      db.collection.find()

      您可以指定查詢或篩選條件以標識要返回的文檔。

      列出集合中的所有文檔

      要選擇集合中的所有文檔,請將空文檔作為查詢過濾器參數傳遞給find方法。查詢過濾器參數確定選擇條件:

      db.inventory.find( {} )

      此操作對應于以下SQL語句:

      SELECT * FROM inventory

      指定相等條件

      要指定相等條件,請:?在查詢過濾器文檔中使用表達式?:

      { : , ... }

      以下示例從inventory集合中選擇status等于的所有文檔"D":

      db.inventory.find( { status: "D" } )

      此操作對應于以下SQL語句:

      SELECT * FROM inventory WHERE status = "D"

      指定條件下使用查詢運算符

      文檔可以使用查詢運算符,以指定在以下形式的條件:

      { : { : }, ... }

      以下示例從inventory?集合中檢索status等于"A"或的所有文檔"D":

      db.inventory.find( { status: { $in: [ "A", "D" ] } } )

      注意

      盡管可以使用$or運算符表示此查詢,但是在同一字段上執行相等性檢查時,請使用$in運算符而不是$or運算符。

      該操作對應于以下SQL語句:

      db.inventory.find( { status: { $in: [ "A", "D" ] } } )

      AND條件

      復合查詢可以為集合文檔中的多個字段指定條件。隱式地,邏輯AND連接將復合查詢的子句連接起來,以便查詢選擇集合中符合所有條件的文檔。

      以下示例檢索inventory?集合中status等于"A"?和?qty小于($lt)的所有文檔30:

      db.inventory.find( { status: "A", qty: { $lt: 30 } } )

      該操作對應于以下SQL語句:

      SELECT * FROM inventory WHERE status = "A" AND qty < 30

      OR條件

      使用$or運算符,您可以指定一個復合查詢,該查詢將每個子句與一個邏輯連接符連接在一起,OR以便該查詢選擇集合中至少匹配一個條件的文檔。

      以下示例檢索status等于"A"?或?qty小于($lt)的集合中的所有文檔30:

      db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

      該操作對應于以下SQL語句:

      SELECT * FROM inventory WHERE status = "A" OR qty < 30

      注意

      使用比較運算符的查詢?需進行Type Bracketing。

      在下面的例子中,status等號"A"?和?任一?qty小于($lt)30?或?item開始字符為p:

      { : { : , ... }, : { : , ... }, ... }

      該操作對應于以下SQL語句:

      SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")

      注意

      MongoDB支持正則表達式$regex查詢以執行字符串模式匹配。

      Update

      Update操作修改在集合已存在的文檔。MongoDB提供了以下方法來更新集合的文檔:

      db.collection.updateOne()?3.2版中的新功能

      db.collection.updateMany()?3.2版中的新功能

      db.collection.replaceOne()?3.2版中的新功能

      在MongoDB中,更新操作針對單個集合。MongoDB中的所有寫操作都是單個文檔級別的原子操作。

      您可以指定標識要更新的文檔的條件或過濾規則。這些過濾器使用與讀取操作相同的語法。

      更新集合中的文檔

      要更新文檔,MongoDB提供了?諸如的更新操作符$set來修改字段值。

      要使用更新運算符,請將以下形式的更新文檔傳遞給更新方法:

      { : { : , ... }, : { : , ... }, ... }

      $set如果該字段不存在,則某些更新運算符(例如)將創建該字段。

      注意:

      從MongoDB 4.2開始,MongoDB可以接受聚合管道來指定要進行的修改而不是更新文檔。有關詳細信息,請參見方法參考頁。

      更新單個文檔

      以下示例使用集合db.collection.updateOne()上的?方法?inventory更新等于的第一個文檔?:item 為 "paper"

      db.inventory.updateOne( { item: "paper" }, { $set: { "size.uom": "cm", status: "P" }, $currentDate: { lastModified: true } } )

      更新操作:

      使用$set操作員更新的值?size.uom字段"cm"和值status?字段"P",

      使用$currentDate運算符將lastModified字段的值更新為當前日期。如果?lastModified字段不存在,?$currentDate將創建該字段。

      更新多個文檔

      3.2版中的新功能。

      以下示例使用集合db.collection.updateMany()?上的方法inventory更新qty小于的所有文檔?50:

      db.inventory.updateMany( { "qty": { $lt: 50 } }, { $set: { "size.uom": "in", status: "P" }, $currentDate: { lastModified: true } } )

      更新操作:

      使用$set操作員更新的值?size.uom字段"in"和值status?字段"P",

      使用$currentDate運算符將lastModified字段的值更新為當前日期。如果?lastModified字段不存在,?$currentDate將創建該字段。

      替換一個文檔

      要替換除_id?字段以外的文檔的所有內容,請將一個全新的文檔作為第二個參數傳遞給?db.collection.replaceOne()。

      替換文檔時,替換文檔必須僅由字段/值對組成;即不包括更新運算符表達式。

      替換文檔可以具有與原始文檔不同的字段。在替換文檔中,_id由于該_id字段是不可變的,因此可以省略該字段;但是,如果確實包含該_id字段,則該?字段必須與當前值具有相同的值。

      下面的示例替換集合中的第一個文檔,?inventory其中:item:?"paper"

      db.inventory.replaceOne( { item: "paper" }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] } )

      Delete

      刪除操作從集合中刪除文檔。MongoDB提供了以下刪除集合文檔的方法:

      db.collection.deleteOne()?3.2版中的新功能

      db.collection.deleteMany()?3.2版中的新功能

      在MongoDB中,刪除操作的目標是單個collection。。

      您可以指定條件或過濾器,以標識要刪除的文檔。這些過濾器使用與讀取操作相同的語法。

      刪除所有文檔

      要刪除集合中的所有文檔,請將空的篩選器文檔傳遞?{}給?db.collection.deleteMany()方法。

      下面的示例從?集合中刪除所有文檔inventory:

      db.inventory.deleteMany({})

      該方法返回具有操作狀態的文檔

      刪除所有符合條件的文檔

      您可以指定標準或過濾器,以標識要刪除的文檔。該過濾器使用相同的語法,讀操作。

      要指定相等條件,請:?在查詢過濾器文檔中使用表達式?:

      db.inventory.deleteMany({})

      查詢過濾器文檔可以使用查詢運算符,以指定在以下形式的條件:

      復制

      復制的

      { < field1 >: { <運算符1 >: < value1 > }, ... }

      要刪除所有符合刪除條件的文檔,請將過濾器參數傳遞?給該?deleteMany()方法。

      以下示例從inventory?該status字段等于的集合中刪除所有文檔"A":

      db.inventory.deleteMany({ status : "A" })

      該方法返回具有操作狀態的文檔。

      僅刪除一個符合條件的文檔

      要最多刪除一個與指定過濾器匹配的文檔(即使多個文檔可能與指定過濾器匹配),請使用db.collection.deleteOne()方法。

      下面的示例刪除第一文件,其中status是?"D":

      db.inventory.deleteOne( { status: "D" } )

      索引

      即使從集合中刪除所有文檔,刪除操作也不會刪除索引。

      Delete Methods

      MongoDB提供了以下刪除集合文檔的方法:

      db.collection.deleteOne()

      即使多個文檔可能與指定過濾器匹配,也最多刪除一個與指定過濾器匹配的文檔。3.2版中的新功能。

      db.collection.deleteMany()

      刪除所有與指定過濾器匹配的文檔。3.2版中的新功能。

      db.collection.remove()

      刪除單個文檔或與指定過濾器匹配的所有文檔。

      以下方法也可以從集合中刪除文檔:

      collection.findOneAndDelete()。

      findOneAndDelete()?提供了一個排序選項。該選項允許刪除按指定順序排序的第一個文檔。

      collection.findAndModify()。

      db.collection.findAndModify()提供排序選項。該選項允許刪除按指定順序排序的第一個文檔。

      collection.bulkWrite()。

      批量寫(Bulk Write)

      概述

      MongoDB使客戶端能夠批量執行寫操作。批量寫入操作會影響單個集合。MongoDB允許應用程序確定批量寫入操作所需的可接受級別。

      3.2版中的新功能。

      db.collection.bulkWrite()方法提供了執行批量插入,更新和刪除操作的能力。MongoDB還支持通過批量插入db.collection.insertMany()。

      有序與無序操作

      批量寫操作可以有序或無序。

      通過有序操作,MongoDB串行執行操作。如果在寫操作之一的處理過程中發生錯誤,MongoDB將返回而不處理列表中任何剩余的寫操作。

      使用不排序的操作,MongoDB可以并行執行操作,但是不能保證此行為。如果在寫操作之一的處理過程中發生錯誤,MongoDB將繼續處理列表中剩余的寫操作。

      在分片集合上執行操作的有序列表通常比執行無序列表要慢,因為對于有序列表,每個操作必須等待上一個操作完成。

      默認情況下,bulkWrite()執行ordered?操作。要指定unordered寫操作,請在選項文檔中進行設置?,ordered?:?false。

      bulkWrite()方法

      bulkWrite()?支持以下寫操作:

      insertOne

      updateOne

      updateMany

      replaceOne

      deleteOne

      deleteMany

      每個寫操作都bulkWrite()作為文檔傳遞到數組中。

      例如,以下執行多個寫操作:

      try { db.characters.bulkWrite( [ { insertOne : { "document" : { "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } }, { insertOne : { "document" : { "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3 } } }, { updateOne : { "filter" : { "char" : "Eldon" }, "update" : { $set : { "status" : "Critical Injury" } } } }, { deleteOne : { "filter" : { "char" : "Brisbane" } } }, { replaceOne : { "filter" : { "char" : "Meldane" }, "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 } } } ] ); } catch (e) { print(e); }

      批量插入分片集合的策略

      大量的大容量插入操作(包括初始數據插入或常規數據導入)可能會影響分片群集的性能。對于批量插入,請考慮以下策略:

      如果分片集合為空,則該集合只有一個初始塊,該塊位于單個分片上。然后,MongoDB必須花一些時間來接收數據,創建拆分并將拆分的塊分發到可用的分片。為了避免這種性能成本,您可以按照拆分碎片中的拆分塊中的說明預先拆分集合?。

      要提高對分片群集的寫入性能,請使用?bulkWrite()可選參數ordered?設置為false。mongos可以嘗試同時將寫入發送到多個分片。對于空集合,首先按照分片群集中的分割塊中的說明預分割集合?。

      如果您的分片鍵在插入過程中單調增加,則所有插入的數據都將到達集合中的最后一塊,該塊將始終以單個分片結尾。因此,群集的插入容量將永遠不會超過該單個分片的插入容量。

      如果您的插入量大于單個分片可以處理的插入量,并且如果您無法避免單調增加的分片鍵,那么請考慮對應用程序進行以下修改:

      反轉分片鍵的二進制位。這樣可以保留信息,并避免將插入順序與值序列的增加關聯起來。

      交換第一個和最后一個16位字以“隨機”插入。

      MongoDB 云數據庫 GaussDB(for Mongo) 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎樣審查有沒有重復內容
      下一篇:Excel VBA變量與常量
      相關文章
      亚洲日韩在线视频| 亚洲手机中文字幕| 亚洲色在线无码国产精品不卡| 亚洲三级电影网站| 国产亚洲一区二区三区在线| 国外亚洲成AV人片在线观看| 亚洲第一页日韩专区| 国产AV无码专区亚洲AV蜜芽| 亚洲成a人片在线观看天堂无码 | 亚洲老熟女五十路老熟女bbw| 亚洲一区二区三区久久久久| 亚洲手机中文字幕| 亚洲偷偷自拍高清| 亚洲中文字幕久久精品蜜桃 | 亚洲乳大丰满中文字幕| 亚洲午夜未满十八勿入网站2| 亚洲线精品一区二区三区影音先锋 | 亚洲一区无码精品色| 日韩一卡2卡3卡4卡新区亚洲| 亚洲色自偷自拍另类小说| 亚洲va无码va在线va天堂| 久久精品国产亚洲av四虎| 亚洲视频2020| 91亚洲性爱在线视频| 亚洲国产成人99精品激情在线| 亚洲综合成人婷婷五月网址| 亚洲精品国产综合久久久久紧| 国内成人精品亚洲日本语音| 亚洲乱码日产精品a级毛片久久| 国产成人精品亚洲精品| 亚洲VA成无码人在线观看天堂| 亚洲电影中文字幕| 亚洲欧洲春色校园另类小说| 亚洲日本人成中文字幕| 亚洲国产AV一区二区三区四区| 国产亚洲精彩视频| 亚洲午夜久久久久妓女影院 | 亚洲日韩AV一区二区三区中文| 大桥未久亚洲无av码在线| 亚洲精品视频免费观看| 亚洲乱码国产乱码精品精|