首頁 > 軟體

MongoDB中的push操作詳解(將檔案插入到陣列)

2022-11-13 14:01:23

1. 概述

在本教學中,我們將介紹如何在MongoDB中將檔案插入到陣列中。此外,我們將看到 $push$addToset 運運算元用於將值新增到陣列中的各種應用。

首先,我們將建立一個範例資料庫、一個集合,並將虛擬資料插入其中。此外,我們將研究一些使用 $push 運運算元更新檔案的基本範例。稍後,我們還將討論 $push$addtoSet 運運算元的各種用例。

讓我們深入研究在 MongoDB 中將檔案插入陣列的各種方法。

2. 資料庫初始化

首先,讓我們建立一個新的資料庫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")
    ]
}

至此,我們已經成功建立了資料庫和集合。我們將在所有範例中使用這個資料庫和集合。

3. 使用 Mongo Query 進行推播操作

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
        }
    ]
}

4. 使用Java驅動程式碼進行推播操作

到目前為止,我們已經討論了將檔案推播到陣列中的 MongoDB shell 查詢。現在讓我們使用 Java 程式碼實現推播更新查詢。

在執行更新操作之前,我們先連線到 baeldung資料庫中的orders集合:

mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("orders");

在這裡,在這種情況下,我們連線到在 localhost 的預設埠 27017 上執行的 MongoDB。

4.1. 使用 DBObject

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 的基礎上,對集合的檔案進行過濾,並將值推播到陣列中。

4.2. 使用 BSON 檔案

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方法僅更新單個檔案。

5. 使用 addToSet操作符

$addToSet運運算元也可用於將值壓入陣列。僅當陣列中不存在該值時,此運運算元才新增值。否則,它只會忽略它。而推播運運算元將推播值作為過濾條件以獲取匹配。

需要注意的一個關鍵點是 $addToSet 運運算元在重複專案的情況下不會推播值工作。另一方面,$push 運運算元只是將值推播到陣列中,而不考慮任何其他條件。

5.1. 使用addToSet運運算元的 Shell 查詢

$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”中。

5.2. 使用addToSet運運算元的 Java 驅動程式

$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”中。

6. 結論

在本文中,我們學習了使用 $push$addToSet 運運算元將新值推播到陣列中。首先,我們研究了 $push 運運算元在 MongoDB shell 查詢中的使用,然後我們討論了相應的 Java 驅動程式程式碼。

總結

到此這篇關於MongoDB中的push操作詳解的文章就介紹到這了,更多相關MongoDB push操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com