Làm cách nào để sử dụng ghi hàng loạt trong MongoDB?

Bắt đầu từ phiên bản 2. 6, Máy chủ MongoDB hỗ trợ các lệnh ghi hàng loạt để chèn, cập nhật và xóa theo cách cho phép trình điều khiển triển khai đúng ngữ nghĩa cho BulkWriteResult và BulkWriteException

Có hai loại hoạt động hàng loạt, hoạt động hàng loạt có thứ tự và không có thứ tự

  1. Các hoạt động hàng loạt được sắp xếp thực hiện tất cả các hoạt động theo thứ tự và lỗi trong lần ghi đầu tiên

  2. Các hoạt động hàng loạt không theo thứ tự thực hiện tất cả các hoạt động và báo cáo bất kỳ lỗi nào. Các hoạt động hàng loạt không có thứ tự không đảm bảo thứ tự thực hiện

    Trong hướng dẫn này, chúng ta sẽ xem xét việc thực hiện các thao tác chèn và cập nhật hàng loạt trong MongoDB. Ngoài ra, MongoDB cung cấp lệnh gọi API cho phép chèn hoặc truy xuất nhiều tài liệu trong một thao tác. MongoDB sử dụng giao diện Array hoặc Batch giúp cải thiện đáng kể hiệu suất cơ sở dữ liệu bằng cách giảm số lượng lệnh gọi giữa máy khách và cơ sở dữ liệu

    Trong hướng dẫn này, chúng ta sẽ xem xét cả hai giải pháp sử dụng MongoDB Shell và mã trình điều khiển Java

    Hãy đi sâu vào việc triển khai cập nhật hàng loạt tài liệu trong MongoDB

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

    Trước hết, chúng ta cần kết nối với vỏ mongo

    mongo --host localhost --port 27017

    Bây giờ, thiết lập cơ sở dữ liệu baeldung và quần thể thu thập mẫu

    use baeldung;
    db.createCollection[populations];

    Hãy thêm một số dữ liệu mẫu vào quần thể bộ sưu tập bằng phương thức insertMany

    db.populations.insertMany[[
    {
        "cityId":1124,
        "cityName":"New York",
        "countryName":"United States",
        "continentName":"North America",
        "population":22
    },
    {
        "cityId":1125,
        "cityName":"Mexico City",
        "countryName":"Mexico",
        "continentName":"North America",
        "population":25
    },
    {
        "cityId":1126,
        "cityName":"New Delhi",
        "countryName":"India",
        "continentName":"Asia",
        "population":45
    },
    {
        "cityId":1134,
        "cityName":"London",
        "countryName":"England",
        "continentName":"Europe",
        "population":32
    }]];

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

    {
        "acknowledged" : true,
        "insertedIds" : [
            ObjectId["623575049d55d4e137e477f6"],
            ObjectId["623575049d55d4e137e477f7"],
            ObjectId["623575049d55d4e137e477f8"],
            ObjectId["623575049d55d4e137e477f9"]
        ]
    }

    Ở đây, chúng tôi đã chèn bốn tài liệu vào truy vấn trên để thực hiện tất cả các loại thao tác ghi hàng loạt trong MongoDB

    Cơ sở dữ liệu baeldung đã được tạo thành công và tất cả dữ liệu cần thiết cũng được chèn vào quần thể bộ sưu tập, vì vậy chúng tôi đã sẵn sàng thực hiện cập nhật hàng loạt

    3. Sử dụng MongoDB Shell Query

    Trình tạo thao tác hàng loạt của MongoDB được sử dụng để xây dựng danh sách các thao tác ghi hàng loạt cho một bộ sưu tập. Chúng tôi có thể khởi tạo các hoạt động hàng loạt theo 2 cách khác nhau. Phương thức initizeOrderedBulkOp được sử dụng để thực hiện các thao tác hàng loạt trong danh sách các thao tác ghi được sắp xếp theo thứ tự. Một trong những nhược điểm của initializeOrderedBulkOp là nếu xảy ra lỗi trong khi xử lý bất kỳ thao tác ghi nào, MongoDB sẽ quay lại mà không xử lý các thao tác ghi còn lại trong danh sách

    Chúng ta có thể sử dụng các phương thức chèn, cập nhật, thay thế và xóa để thực hiện các loại hoạt động khác nhau trong một lệnh gọi DB. Để minh họa, chúng ta hãy xem xét truy vấn thao tác ghi hàng loạt bằng trình bao MongoDB

    db.populations.bulkWrite[[
        { 
            insertOne :
                { 
                    "document" :
                        {
                            "cityId":1128,
                            "cityName":"Kathmandu",
                            "countryName":"Nepal",
                            "continentName":"Asia",
                            "population":12
                        }
                }
        },
        { 
            insertOne :
                { 
                    "document" :
                        {
                            "cityId":1130,
                            "cityName":"Mumbai",
                            "countryName":"India",
                            "continentName":"Asia",
                            "population":55
                        }
                }
        },
        { 
            updateOne :
                { 
                    "filter" : 
                         { 
                             "cityName": "New Delhi"
                         },
                     "update" : 
                         { 
                             $set : 
                             { 
                                 "status" : "High Population"
                             } 
                         }
                }
        },
        { 
            updateMany :
                { 
                    "filter" : 
                         { 
                             "cityName": "London"
                         },
                     "update" : 
                         { 
                             $set : 
                             { 
                                 "status" : "Low Population"
                             } 
                         }
                }
        },
        { 
            deleteOne :
                { 
                    "filter" : 
                        { 
                            "cityName":"Mexico City"
                        } 
                }
        },
        { 
            replaceOne :
                {
                    "filter" : 
                        { 
                            "cityName":"New York"
                        },
                     "replacement" : 
                        {
                            "cityId":1124,
                            "cityName":"New York",
                            "countryName":"United States",
                            "continentName":"North America",
                            "population":28
                        }
                 }
        }
    ]];

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

    {
        "acknowledged" : true,
        "deletedCount" : 1,
        "insertedCount" : 2,
        "matchedCount" : 3,
        "upsertedCount" : 0,
        "insertedIds" : 
            {
                "0" : ObjectId["623575f89d55d4e137e477f9"],
                "1" : ObjectId["623575f89d55d4e137e477fa"]
            },
        "upsertedIds" : {}
    }

    Ở đây, trong truy vấn trên, chúng tôi đã thực hiện tất cả các loại thao tác ghi, tôi. e. , insertOne, updateOne, xóaOne, thay thếOne

    Đầu tiên, chúng ta sử dụng phương thức insertOne để chèn một tài liệu mới vào bộ sưu tập. Thứ hai, chúng tôi đã sử dụng updateOne để cập nhật tài liệu của cityName “New Delhi”. Sau đó, chúng tôi đã sử dụng phương thức deleteOne để xóa tài liệu khỏi bộ sưu tập dựa trên bộ lọc. Cuối cùng, chúng tôi đã sử dụng replaceOne để thay thế một tài liệu hoàn chỉnh bằng bộ lọc cityName “New York”.

    4. Sử dụng trình điều khiển Java

    Chúng ta đã thảo luận về truy vấn trình bao MongoDB để thực hiện các thao tác ghi hàng loạt. Trước khi tạo thao tác ghi hàng loạt, trước tiên hãy tạo kết nối MongoClient với các quần thể bộ sưu tập của cơ sở dữ liệu baeldung

    MongoClient mongoClient = new MongoClient["localhost", 27017];
    MongoDatabase database = mongoClient.getDatabase["baeldung"];
    MongoCollection collection = database.getCollection["populations"];

    Ở đây, chúng tôi đã tạo kết nối với máy chủ MongoDB, chạy trên cổng mặc định 27017. Bây giờ chúng ta hãy triển khai các thao tác hàng loạt tương tự bằng cách sử dụng mã Java

    List writeOperations = new ArrayList[];
    writeOperations.add[new InsertOneModel[new Document["cityId", 1128]
      .append["cityName", "Kathmandu"]
      .append["countryName", "Nepal"]
      .append["continentName", "Asia"]
      .append["population", 12]]];
    writeOperations.add[new InsertOneModel[new Document["cityId", 1130]
      .append["cityName", "Mumbai"]
      .append["countryName", "India"]
      .append["continentName", "Asia"]
      .append["population", 55]]];
    writeOperations.add[new UpdateOneModel[new Document["cityName", "New Delhi"],
      new Document["$set", new Document["status", "High Population"]]
    ]];
    writeOperations.add[new UpdateManyModel[new Document["cityName", "London"],
      new Document["$set", new Document["status", "Low Population"]]
    ]];
    writeOperations.add[new DeleteOneModel[new Document["cityName", "Mexico City"]]];
    writeOperations.add[new ReplaceOneModel[new Document["cityId", 1124], 
      new Document["cityName", "New York"].append["cityName", "United States"]
        .append["continentName", "North America"]
        .append["population", 28]]];
    BulkWriteResult bulkWriteResult = collection.bulkWrite[writeOperations];
    System.out.println["bulkWriteResult:- " + bulkWriteResult];

    Tại đây, trước tiên chúng tôi tạo một danh sách writeModel để thêm tất cả các loại thao tác ghi khác nhau vào một danh sách cập nhật duy nhất. Hơn nữa, chúng tôi đã sử dụng InsertOneModel, UpdateOneModel, UpdateManyModel, DeleteOneModel và ReplaceOneModel trong truy vấn của mình. Cuối cùng, phương thức bulkWrite đã thực thi tất cả các thao tác cùng một lúc

    5. Phần kết luận

    Trong bài viết này, chúng ta đã học cách thực hiện các thao tác hàng loạt trong MongoDB bằng cách sử dụng các loại thao tác ghi khác nhau. Chúng tôi đã thực hiện tất cả thao tác chèn, cập nhật, xóa và thay thế tài liệu trong một truy vấn cơ sở dữ liệu duy nhất. Ngoài ra, chúng tôi đã tìm hiểu các trường hợp sử dụng khởi tạoOrderedBulkOp vào bản cập nhật hàng loạt trong MongoDB

    Lúc đầu, chúng tôi đã xem xét các trường hợp sử dụng của các hoạt động hàng loạt trong truy vấn trình bao MongoDB, sau đó chúng tôi đã thảo luận về mã trình điều khiển Java tương ứng

    Viết số lượng lớn trong MongoDB là gì?

    Thao tác ghi hàng loạt có thể được sắp xếp theo thứ tự hoặc không theo thứ tự . Với một danh sách các hoạt động được sắp xếp theo thứ tự, MongoDB thực thi các hoạt động một cách tuần tự. Nếu xảy ra lỗi trong quá trình xử lý một trong các thao tác ghi, MongoDB sẽ quay trở lại mà không xử lý bất kỳ thao tác ghi nào còn lại trong danh sách.

    Làm cách nào để chèn dữ liệu hàng loạt vào MongoDB?

    Trong MongoDB, Hàng loạt. phương thức insert[] được sử dụng để thực hiện thao tác chèn hàng loạt. Hay nói cách khác, hàng loạt. phương thức insert[] được sử dụng để chèn nhiều tài liệu trong một lần.

    Làm cách nào để sử dụng số lượng lớnWrite trong cầy mangut?

    bulkWrite[] chấp nhận ba tham số. .
    hoạt động. Nó là một mảng các đối tượng với các hoạt động khác nhau. Giống. insertOne, updateOne, updateMany, deleteOne, deleteMany, replaceOne, v.v.
    tùy chọn. Nó là một đối tượng với các thuộc tính khác nhau
    gọi lại. Đây là một chức năng gọi lại sẽ chạy sau khi thực hiện xong

    Làm cách nào để sử dụng cập nhật hàng loạt trong MongoDB?

    Chúng ta có thể sử dụng phương thức initializeOrderedBulkOp[] hoặc initializeUnorderedBulkOp[] để thực hiện các thao tác hàng loạt trong MongoDB . Chúng tôi cần sử dụng số lượng lớn. exec[] để chạy tất cả các hoạt động được xây dựng bởi các phương thức hàng loạt. Từ phiên bản MongoDB, 4. 2 phương pháp cập nhật hàng loạt sẽ chấp nhận tập hợp đường ống.

Chủ Đề