MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Hoạt động đẩy trong MongoDB

1. Tổng quan

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 $ push và $ addToset toán tử để thêm 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 $ push nhà điều hành. 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 $ push $ addtoSet toán tử.

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à một bộ sưu tập mẫu, đơn đặt hàng :

use baeldung;
db.createCollection(orders);

Bây giờ, 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 insertMany phương pháp:

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ư lệnh được hiển thị bên dưới:

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

Cho đến bây giờ, 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 các mảng trong tài liệu MongoDB. $ push toán tử trong MongoDB thêm giá trị vào cuối mảng. Tùy thuộc vào loại truy vấn, chúng tôi có thể sử dụng $ push toán tử với các phương thức như updateOne , updateMany , findAndModify , v.v.

Bây giờ chúng ta hãy xem xét truy vấn shell bằng cách sử dụng $ push nhà điều hành:

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ờ chúng ta hãy kiểm tra tài liệu với customerId 1023. Tại đây, chúng ta có thể thấy rằng mục mới được chèn vào cuối danh sách “ mục “:

{
    "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. Hoạt động đẩy sử dụ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 đơn đặt hàng bộ sưu tập trong baeldung cơ sở dữ liệu:

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 Java MongoDB cung cấp hỗ trợ cả DBObject BSON tài liệu. Đây, DBObject là một phần của trình điều khiển kế thừa MongoDB, nhưng trình điều khiển này không được chấp nhận trong phiên bản MongoDB mới hơn.

Bây giờ chúng ta hãy xem xét 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 tôi 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 BSON Tài liệu

BSON Tài liệu 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. org.bson.Document lớp này ít phức tạp hơn và dễ sử dụng hơn.

Hãy sử dụng org.bson.Document lớp để đẩy các giá trị vào mảng “ 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));

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

5. Sử dụng addToSet Nhà điều hành

$ addToSet toán tử 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ẽ chỉ 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ả phù hợp.

Một điểm chính cần lưu ý là $ addToSet toán tử 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, nhà điều hành $ push chỉ cần đẩ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 addToSet Nhà điều hành

Truy vấn trình bao mongo của $ addToSet toán tử tương tự với $ push nhưng $ addToSet không chèn giá trị trùng lặp trong mảng.

Bây giờ chúng ta 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, kết quả sẽ như sau:

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

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

5.2. Trình điều khiển Java Sử dụng addToSet Nhà điều hành

$ addToSet toán tử 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:

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

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB chọn vị trí trong mảng _id?

  2. Trình điều khiển Mongodb C # chỉ trả về các tài liệu con phù hợp trong mảng

  3. SchemaType trong Mongoose nào là tốt nhất cho Dấu thời gian?

  4. MongoDB Security - Tài nguyên để giữ an toàn cho các DB NoSQL

  5. Chèn phần tử vào các mảng lồng nhau trong MongoDB