Làm cách nào để đẩy giá trị trong mảng trong MongoDB?

Trong hướng dẫn này, chúng tôi sẽ giới thiệu cách chèn tài liệu vào một mảng trong MongoDB. Ngoài ra, chúng ta sẽ thấy các ứng dụng khác nhau của toán tử $push và $addToset để cộng các giá trị vào một mảng

Đầu tiên, chúng ta sẽ tạo một cơ sở dữ liệu mẫu, một bộ sưu tập và chèn dữ liệu giả vào đó. Hơn nữa, chúng ta sẽ xem xét một số ví dụ cơ bản để cập nhật tài liệu bằng cách sử dụng toán tử $push. Sau đó, chúng ta cũng sẽ thảo luận về các trường hợp sử dụng khác nhau của toán tử $push và $addtoSet

Hãy đi sâu vào các phương pháp khác nhau để chèn tài liệu vào một mảng trong MongoDB

2. Khởi tạo cơ sở dữ liệu

Trước hết, hãy thiết lập cơ sở dữ liệu mới baeldung và bộ sưu tập mẫu, đơn đặt hàng

use baeldung;
db.createCollection(orders);

Bây giờ chúng ta hãy thêm một vài tài liệu vào bộ sưu tập bằng cách sử dụng phương thức 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
            } 
          ]
    }
]);

Trong trường hợp chèn thành công, lệnh trên sẽ in ra một JSON tương tự như hình bên dưới

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("622300cc85e943405d04b567"),
	ObjectId("622300cc85e943405d04b568")
    ]
}

Đến nay, chúng tôi đã thiết lập thành công cơ sở dữ liệu và bộ sưu tập. Chúng tôi sẽ sử dụng cơ sở dữ liệu và bộ sưu tập này cho tất cả các ví dụ

3. Thao tác đẩy bằng truy vấn Mongo

MongoDB cung cấp nhiều loại toán tử mảng khác nhau để cập nhật mảng trong tài liệu MongoDB. Toán tử $push trong MongoDB nối thêm giá trị vào cuối mảng. Tùy thuộc vào loại truy vấn, chúng ta có thể sử dụng toán tử $push với các phương thức như updateOne, updateMany, findAndModify, v.v.

Bây giờ chúng ta hãy xem truy vấn trình bao bằng cách sử dụng toán tử $push

db.orders.updateOne(
    {
        "customerId": 1023
    },
    {
        $push: {
            "items":{
                "itemName": "PIZZA MANIA",
                "quantity": 1,
                "price": 800
            }
        }
    });

Truy vấn trên sẽ trả về tài liệu sau

{
    "acknowledged":true,
    "matchedCount":1,
    "modifiedCount":1
}

Bây giờ, hãy kiểm tra tài liệu với ID khách hàng 1023. Ở đây, chúng ta có thể thấy rằng mục mới được chèn vào cuối danh sách “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. Thao tác đẩy bằng mã trình điều khiển Java

Cho đến bây giờ, chúng ta đã thảo luận về truy vấn trình bao MongoDB để đẩy tài liệu vào một mảng. Bây giờ hãy triển khai truy vấn cập nhật đẩy bằng mã Java

Trước khi thực hiện thao tác cập nhật, trước tiên hãy kết nối với bộ sưu tập đơn đặt hàng trong cơ sở dữ liệu baeldung

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

Ở đây, trong trường hợp này, chúng tôi đang kết nối với MongoDB đang chạy ở cổng mặc định 27017 trên localhost

4. 1. Sử dụng DBObject

Trình điều khiển MongoDB Java cung cấp hỗ trợ cho cả tài liệu DBObject và BSON. Ở đây, DBObject là một phần của trình điều khiển kế thừa MongoDB, nhưng nó không được dùng trong phiên bản mới hơn của MongoDB

Bây giờ chúng ta hãy xem mã trình điều khiển Java để chèn các giá trị mới vào mảng

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);

Trong truy vấn trên, trước tiên chúng ta tạo tài liệu mục bằng BasicDBObject. Trên cơ sở searchQuery, các tài liệu của bộ sưu tập sẽ được lọc và các giá trị sẽ được đẩy vào mảng

4. 2. Sử dụng Tài liệu BSON

Tài liệu BSON là cách mới để truy cập tài liệu MongoDB trong Java được xây dựng với ngăn xếp máy khách mới hơn. tổ chức. con trai. Lớp tài liệu ít phức tạp hơn và dễ sử dụng hơn

Hãy sử dụng tổ chức. con trai. Lớp tài liệu để đẩy các giá trị vào mảng "items"

________số 8_______

Trong trường hợp này, việc triển khai BSON tương tự như mã chạy bằng DBObject và việc cập nhật cũng sẽ giống như vậy. Ở đây, chúng tôi đã sử dụng phương thức updateOne để chỉ cập nhật một tài liệu duy nhất

5. Sử dụng toán tử addToSet

Toán tử $addToSet cũng có thể được sử dụng để đẩy một giá trị trong mảng. Toán tử này chỉ thêm giá trị nếu giá trị đó không tồn tại trong mảng. Nếu không, nó sẽ bỏ qua nó. Trong khi đó, toán tử đẩy sẽ đẩy giá trị làm điều kiện để lọc lấy kết quả khớp

Một điểm quan trọng cần lưu ý là toán tử $addToSet không đẩy giá trị hoạt động trong trường hợp một mục trùng lặp. Mặt khác, toán tử $push chỉ đẩy giá trị vào mảng bất kể điều kiện nào khác

5. 1. Truy vấn Shell bằng cách sử dụng Toán tử addToSet

Truy vấn shell mongo của toán tử $addToSet tương tự như toán tử $push, nhưng $addToSet không chèn giá trị trùng lặp vào mảng

Bây giờ, hãy kiểm tra truy vấn MongoDB để đẩy các giá trị vào một mảng bằng cách sử dụng $addToset

db.orders.updateOne(
    {
        "customerId": 1023
    },
    {
        $addToSet: {
            "items":{
                "itemName": "PASTA",
                "quantity": 1,
                "price": 1000
            }
        }
    });

Trong trường hợp này, đầu ra sẽ như sau

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
            } 
          ]
    }
]);
0

Trong trường hợp này, chúng tôi đã sử dụng toán tử $addToSet và tài liệu sẽ được đẩy vào mảng “các mục” chỉ khi nó là duy nhất

5. 2. Trình điều khiển Java Sử dụng Toán tử addToSet

Toán tử $addToSet cung cấp một loại hoạt động cập nhật mảng khác so với toán tử đẩy

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
            } 
          ]
    }
]);
1

Trong đoạn mã trên, đầu tiên, chúng ta tạo tài liệu “item“, và trên cơ sở bộ lọc customerId, phương thức updateOne sẽ cố gắng đẩy tài liệu “item” vào mảng “items“

6. Phần kết luận

Trong bài viết này, chúng ta đã học cách đẩy các giá trị mới vào mảng bằng toán tử $push và $addToSet. Đầu tiên, chúng ta đã xem xét việc sử dụng toán tử $push trong truy vấn trình bao MongoDB, sau đó chúng ta thảo luận về mã trình điều khiển Java tương ứng

Làm cách nào để đẩy đối tượng vào mảng trong MongoDB?

Trong MongoDB, toán tử $push được sử dụng để nối một giá trị đã chỉ định vào một mảng . Nếu trường được đề cập không có trong tài liệu để cập nhật, toán tử $push sẽ thêm trường đó dưới dạng trường mới và bao gồm giá trị được đề cập làm thành phần của nó. Nếu trường cập nhật không phải là trường kiểu mảng thì thao tác không thành công.

Làm cách nào để cập nhật giá trị mảng trong MongoDB?

Bạn có thể sử dụng các phương thức updateOne() hoặc updateMany() để thêm, cập nhật hoặc xóa các phần tử mảng dựa trên các tiêu chí đã chỉ định . Nên sử dụng phương thức updateMany() để cập nhật nhiều mảng trong một bộ sưu tập.

Làm cách nào để lưu trữ các giá trị mảng trong MongoDB?

Làm việc với mảng trong MongoDB .
Giới thiệu. .
Tạo và truy vấn tài liệu. .
Thêm một phần tử mảng. .
Cập nhật một phần tử mảng. .
Xóa một phần tử mảng. .
Thêm một Trường mới cho tất cả các Đối tượng trong Mảng. .
Cập nhật một phần tử mảng cụ thể dựa trên một điều kiện. .
Phần kết luận

Làm cách nào để đẩy nhiều giá trị trong mảng ở cầy mangut?