<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在本教學中,我們將介紹如何在MongoDB中將檔案插入到陣列中。此外,我們將看到 $push
和 $addToset
運運算元用於將值新增到陣列中的各種應用。
首先,我們將建立一個範例資料庫、一個集合,並將虛擬資料插入其中。此外,我們將研究一些使用 $push
運運算元更新檔案的基本範例。稍後,我們還將討論 $push
和 $addtoSet
運運算元的各種用例。
讓我們深入研究在 MongoDB 中將檔案插入陣列的各種方法。
首先,讓我們建立一個新的資料庫baeldung和一個樣本集合,orders:
use baeldung; db.createCollection(orders);
現在讓我們使用insertMany方法將一些檔案新增到集合中:
db.orders.insertMany([ { "customerId": 1023, "orderTimestamp": NumberLong("1646460073000"), "shippingDestination": "336, Street No.1 Pawai Mumbai", "purchaseOrder": 1000, "contactNumber":"9898987676", "items": [ { "itemName": "BERGER", "quantity": 1, "price": 500 }, { "itemName": "VEG PIZZA", "quantity": 1, "price": 800 } ] }, { "customerId": 1027, "orderTimestamp": NumberLong("1646460087000"), "shippingDestination": "445, Street No.2 Pawai Mumbai", "purchaseOrder": 2000, "contactNumber":"9898987676", "items": [ { "itemName": "BERGER", "quantity": 1, "price": 500 }, { "itemName": "NON-VEG PIZZA", "quantity": 1, "price": 1200 } ] } ]);
如果插入成功,上面的命令將列印一個類似於下面的 JSON:
{ "acknowledged" : true, "insertedIds" : [ ObjectId("622300cc85e943405d04b567"), ObjectId("622300cc85e943405d04b568") ] }
至此,我們已經成功建立了資料庫和集合。我們將在所有範例中使用這個資料庫和集合。
MongoDB 提供了各種型別的陣列運運算元來更新 MongoDB 檔案中的陣列。 MongoDB 中的 $push
運運算元將值附加到陣列的末尾。根據查詢的型別,我們可以將$push
運運算元與updateOne、updateMany、findAndModify 等方法一起使用。
現在讓我們看看使用*$push*運運算元的 shell 查詢:
db.orders.updateOne( { "customerId": 1023 }, { $push: { "items":{ "itemName": "PIZZA MANIA", "quantity": 1, "price": 800 } } });
上述查詢將返回以下檔案:
{ "acknowledged":true, "matchedCount":1, "modifiedCount":1 }
現在讓我們檢視customerId 為 1023的檔案。在這裡,我們可以看到新專案插入到列表“ items ”的末尾:
{ "customerId" : 1023, "orderTimestamp" : NumberLong("1646460073000"), "shippingDestination" : "336, Street No.1 Pawai Mumbai", "purchaseOrder" : 1000, "contactNumber" : "9898987676", "items" : [ { "itemName" : "BERGER", "quantity" : 1, "price" : 500 }, { "itemName" : "VEG PIZZA", "quantity" : 1, "price" : 800 }, { "itemName" : "PIZZA MANIA", "quantity" : 1, "price" : 800 } ] }
到目前為止,我們已經討論了將檔案推播到陣列中的 MongoDB shell 查詢。現在讓我們使用 Java 程式碼實現推播更新查詢。
在執行更新操作之前,我們先連線到 baeldung資料庫中的orders集合:
mongoClient = new MongoClient("localhost", 27017); MongoDatabase database = mongoClient.getDatabase("baeldung"); MongoCollection<Document> collection = database.getCollection("orders");
在這裡,在這種情況下,我們連線到在 localhost 的預設埠 27017 上執行的 MongoDB。
MongoDB Java 驅動程式提供對DBObject和BSON檔案的支援。在這裡,DBObject是 MongoDB 舊版驅動程式的一部分,但在較新版本的 MongoDB 中已棄用。
現在讓我們看看 Java 驅動程式程式碼以將新值插入到陣列中:
DBObject listItem = new BasicDBObject("items", new BasicDBObject("itemName", "PIZZA MANIA") .append("quantity", 1) .append("price", 800)); BasicDBObject searchFilter = new BasicDBObject("customerId", 1023); BasicDBObject updateQuery = new BasicDBObject(); updateQuery.append("$push", listItem); UpdateResult updateResult = collection.updateOne(searchFilter, updateQuery);
在上面的查詢中,我們首先使用BasicDBObject建立了專案檔案。在searchQuery 的基礎上,對集合的檔案進行過濾,並將值推播到陣列中。
BSON檔案是存取 Java 中的 MongoDB 檔案的新方法,它是使用較新的使用者端堆疊構建的。org.bson.Document
類不太複雜且更易於使用。
讓我們使用org.bson.Document 類將值推播到陣列“ items”中:
Document item = new Document() .append("itemName1", "PIZZA MANIA") .append("quantity", 1).append("price", 800); UpdateResult updateResult = collection.updateOne(Filters.eq("customerId", 1023), Updates.push("items", item));
在這種情況下,BSON的實現類似於使用DBObject 執行的程式碼,更新也將是相同的。在這裡,我們使用updateOne方法僅更新單個檔案。
$addToSet運運算元也可用於將值壓入陣列。僅當陣列中不存在該值時,此運運算元才新增值。否則,它只會忽略它。而推播運運算元將推播值作為過濾條件以獲取匹配。
需要注意的一個關鍵點是 $addToSet
運運算元在重複專案的情況下不會推播值工作。另一方面,$push
運運算元只是將值推播到陣列中,而不考慮任何其他條件。
$addToSet
運運算元的 mongo shell 查詢類似於 $push
運運算元,但 $addToSet
不會在陣列中插入重複值。
現在讓我們檢查一下 MongoDB 查詢,以使用&$addToset*將值推播到陣列中:
db.orders.updateOne( { "customerId": 1023 }, { $addToSet: { "items":{ "itemName": "PASTA", "quantity": 1, "price": 1000 } } });
在這種情況下,輸出將如下所示:
{ "acknowledged":true, "matchedCount":1, "modifiedCount":1 }
在這種情況下,我們使用了 $addToSet
運運算元,只有當檔案是唯一的時,才會將其推播到陣列“items”中。
$addToSet操作符提供了一種與推播操作符不同型別的陣列更新操作:
Document item = new Document() .append("itemName1", "PIZZA MANIA") .append("quantity", 1).append("price", 800); UpdateResult updateResult = collection .updateOne(Filters.eq("customerId", 1023), Updates.addToSet("items", item)); System.out.println("updateResult:- " + updateResult);
在上面的程式碼中,首先我們建立了檔案“item”,在customerId過濾器的基礎上,updateOne方法會嘗試將檔案“item”推播到陣列“items”中。
在本文中,我們學習了使用 $push
和 $addToSet
運運算元將新值推播到陣列中。首先,我們研究了 $push
運運算元在 MongoDB shell 查詢中的使用,然後我們討論了相應的 Java 驅動程式程式碼。
到此這篇關於MongoDB中的push操作詳解的文章就介紹到這了,更多相關MongoDB push操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45