Những gì được thiết lập trong MongoDB?

MongoDB là cơ sở dữ liệu NoSQL hướng tài liệu được cung cấp công khai. Chúng tôi có thể cập nhật các tài liệu trong bộ sưu tập bằng nhiều phương pháp khác nhau như cập nhật, thay thế và lưu. Để thay đổi một trường cụ thể của tài liệu, chúng tôi sẽ sử dụng các toán tử khác nhau như $set, $inc, v.v.

Trong hướng dẫn này, chúng ta sẽ học cách sửa đổi nhiều trường của tài liệu bằng truy vấn cập nhật và thay thế. Đối với mục đích trình diễn, trước tiên chúng ta sẽ thảo luận về truy vấn trình bao mongo và sau đó là triển khai tương ứng của truy vấn đó trong Java

Bây giờ chúng ta hãy xem xét các phương pháp khác nhau để đạt được mục đích

2. Truy vấn Shell để cập nhật các trường khác nhau

Trước khi bắt đầu, trước tiên chúng ta hãy tạo cơ sở dữ liệu mới, baeldung và bộ sưu tập mẫu, employee. Chúng tôi sẽ sử dụng bộ sưu tập này trong tất cả các ví dụ

use baeldung;
db.createCollection(employee);

Bây giờ, hãy thêm một số tài liệu vào bộ sưu tập này bằng cách sử dụng truy vấn insertMany

db.employee.insertMany([
    {
        "employee_id": 794875,
        "employee_name": "David Smith",
        "job": "Sales Representative",
        "department_id": 2,
        "salary": 20000,
        "hire_date": NumberLong("1643969311817")
    },
    {
        "employee_id": 794876,
        "employee_name": "Joe Butler",
        "job": "Sales Manager",
        "department_id": 3,
        "salary": 30000,
        "hire_date": NumberLong("1645338658000")
    }
]);

Kết quả là chúng ta sẽ nhận được một JSON với ObjectId cho cả hai tài liệu như hình bên dưới

{
    "acknowledged": true,
    "insertedIds": [
        ObjectId("6211e034b76b996845f3193d"),
        ObjectId("6211e034b76b996845f3193e")
        ]
}

Cho đến nay, chúng tôi đã thiết lập môi trường cần thiết. Bây giờ hãy cập nhật các tài liệu mà chúng tôi vừa chèn

2. 1. Cập nhật nhiều trường của một tài liệu

Chúng ta có thể sử dụng toán tử $set và $inc để cập nhật bất kỳ trường nào trong MongoDB. Toán tử $set sẽ đặt giá trị mới được chỉ định trong khi toán tử $inc sẽ tăng giá trị theo một giá trị đã chỉ định

Trước tiên, hãy xem xét truy vấn MongoDB để cập nhật hai trường của bộ sưu tập nhân viên bằng cách sử dụng toán tử $set

db.employee.updateOne(
    {
        "employee_id": 794875,
        "employee_name": "David Smith"
    },
    {
        $set:{
            department_id:3,
            job:"Sales Manager"
        }
    }
);

Trong truy vấn trên, trường employee_id và employee_name được sử dụng để lọc tài liệu và toán tử $set được sử dụng để cập nhật trường job và department_id

Chúng ta cũng có thể sử dụng các toán tử $set và $inc cùng nhau trong một truy vấn cập nhật duy nhất

db.employee.updateOne(
    {
        "employee_id": 794875
    },
    {
        $inc: {
            department_id: 1
        },
        $set: {
            job: "Sales Manager"
        }
    }
);

Thao tác này sẽ cập nhật trường công việc thành Quản lý bán hàng và tăng department_id lên 1

2. 2. Cập nhật nhiều trường của nhiều tài liệu

Ngoài ra chúng ta cũng có thể cập nhật nhiều trường của nhiều tài liệu trong MongoDB. Chúng ta chỉ cần thêm tùy chọn multi. true để sửa đổi tất cả các tài liệu phù hợp với tiêu chí truy vấn bộ lọc

db.employee.update(
    {
        "job": "Sales Representative"
    },
    {
        $inc: { 
            salary: 10000
        }, 
        $set: { 
            department_id: 5
        }
    },
    {
        multi: true 
    }
);

Ngoài ra, chúng tôi sẽ nhận được kết quả tương tự bằng cách sử dụng truy vấn updateMany

db.employee.updateMany(
    {
        "job": "Sales Representative"
    },
    {
        $inc: {
            salary: 10000
        },
        $set: {
            department_id: 5
        }
    }
);

Trong truy vấn trên, chúng tôi đã sử dụng phương thức updateMany để cập nhật nhiều hơn 1 tài liệu của bộ sưu tập

2. 3. Sự cố thường gặp khi cập nhật nhiều trường

Cho đến giờ, chúng ta đã học cách cập nhật nhiều trường bằng cách sử dụng truy vấn cập nhật bằng cách cung cấp hai toán tử khác nhau hoặc sử dụng một toán tử duy nhất trên nhiều trường

Bây giờ, nếu chúng ta sử dụng một toán tử nhiều lần với các trường khác nhau trong một truy vấn, MongoDB sẽ chỉ cập nhật câu lệnh cuối cùng của truy vấn cập nhật và bỏ qua phần còn lại

db.employee.updateMany(
    {
        "employee_id": 794875
    },
    {
        $set: {
            department_id: 3
        },
        $set: {
            job:"Sales Manager"
        }
    }
);

Truy vấn trên sẽ trả về kết quả tương tự như truy vấn này

________số 8_______

Trong trường hợp này, công việc duy nhất sẽ được cập nhật thành "Quản lý bán hàng". Giá trị department_id sẽ không được cập nhật thành 3

3. Cập nhật các trường bằng trình điều khiển Java

Cho đến nay, chúng ta đã thảo luận về các truy vấn MongoDB thô. Bây giờ hãy thực hiện các thao tác tương tự bằng Java. Trình điều khiển Java MongoDB hỗ trợ hai lớp để biểu diễn một tài liệu MongoDB, com. mongodb. BasicDBObject và tổ chức. con trai. Tài liệu. Chúng ta sẽ xem xét cả hai phương pháp để cập nhật các trường trong tài liệu

Trước khi tiếp tục, trước tiên hãy kết nối với bộ sưu tập nhân viên bên trong baeldung DB

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

Ở đây, chúng tôi giả định rằng MongoDB đang chạy cục bộ tại cổng mặc định là 27017

3. 1. Sử dụng DBObject

Để tạo tài liệu trong MongoDB, chúng ta sẽ sử dụng lệnh com. mongodb. Giao diện DBObject và lớp triển khai của nó com. mongodb. BasicDBObject

Việc triển khai DBObject dựa trên các cặp khóa-giá trị. BasicDBObject được kế thừa từ lớp LinkedHashMap trong gói util

Bây giờ chúng ta hãy sử dụng com. mongodb. BasicDBObject để thực hiện thao tác cập nhật trên nhiều trường

db.employee.insertMany([
    {
        "employee_id": 794875,
        "employee_name": "David Smith",
        "job": "Sales Representative",
        "department_id": 2,
        "salary": 20000,
        "hire_date": NumberLong("1643969311817")
    },
    {
        "employee_id": 794876,
        "employee_name": "Joe Butler",
        "job": "Sales Manager",
        "department_id": 3,
        "salary": 30000,
        "hire_date": NumberLong("1645338658000")
    }
]);
0

Ở đây, trước tiên, chúng tôi đã tạo một truy vấn bộ lọc trên cơ sở employee_id. Thao tác này sẽ trả về một bộ tài liệu. Hơn nữa, chúng tôi đã cập nhật giá trị của bộ phận_id và công việc theo truy vấn đã đặt

3. 2. Sử dụng tài liệu bson

Chúng tôi có thể thực hiện tất cả các thao tác MongoDB bằng tài liệu bson. Đối với điều đó, trước tiên, chúng ta cần đối tượng bộ sưu tập và sau đó thực hiện thao tác cập nhật bằng cách sử dụng phương thức updateMany với các chức năng bộ lọc và thiết lập

db.employee.insertMany([
    {
        "employee_id": 794875,
        "employee_name": "David Smith",
        "job": "Sales Representative",
        "department_id": 2,
        "salary": 20000,
        "hire_date": NumberLong("1643969311817")
    },
    {
        "employee_id": 794876,
        "employee_name": "Joe Butler",
        "job": "Sales Manager",
        "department_id": 3,
        "salary": 30000,
        "hire_date": NumberLong("1645338658000")
    }
]);
1

Ở đây, chúng tôi đang chuyển bộ lọc truy vấn tới phương thức updateMany. Bộ lọc eq đối sánh employee_id với văn bản đối sánh chính xác '794875'. Sau đó, chúng tôi cập nhật bộ phận_id và công việc bằng cách sử dụng toán tử thiết lập

4. Sử dụng Truy vấn Thay thế

Cách tiếp cận ngây thơ để cập nhật nhiều trường của tài liệu là thay thế nó bằng một tài liệu mới có các giá trị được cập nhật

Ví dụ: nếu chúng tôi muốn thay thế một tài liệu bằng employee_id 794875, chúng tôi có thể thực hiện truy vấn sau

db.employee.insertMany([
    {
        "employee_id": 794875,
        "employee_name": "David Smith",
        "job": "Sales Representative",
        "department_id": 2,
        "salary": 20000,
        "hire_date": NumberLong("1643969311817")
    },
    {
        "employee_id": 794876,
        "employee_name": "Joe Butler",
        "job": "Sales Manager",
        "department_id": 3,
        "salary": 30000,
        "hire_date": NumberLong("1645338658000")
    }
]);
2

Lệnh trên sẽ in một JSON xác nhận ở đầu ra

________số 8_______

Ở đây, trường employee_id được sử dụng để lọc tài liệu. Đối số thứ hai của truy vấn cập nhật biểu thị tài liệu mà tài liệu hiện có sẽ được thay thế

Trong truy vấn trên, chúng tôi đang thực hiện replaceOne, do đó, nó sẽ chỉ thay thế một tài liệu duy nhất bằng bộ lọc đó. Ngoài ra, nếu chúng tôi muốn thay thế tất cả các tài liệu bằng truy vấn bộ lọc đó, thì chúng tôi sẽ cần sử dụng phương thức updateMany

5. Phần kết luận

Trong bài viết này, chúng tôi đã khám phá nhiều cách khác nhau để cập nhật nhiều trường của tài liệu trong MongoDB. Chúng tôi đã thảo luận rộng rãi về hai cách triển khai, sử dụng MongoDB shell và sử dụng trình điều khiển Java

Có nhiều tùy chọn khác nhau để cập nhật nhiều trường của tài liệu bao gồm các toán tử $inc và $set 

Tại sao nên sử dụng $set trong MongoDB?

$set xuất tài liệu chứa tất cả các trường hiện có từ tài liệu đầu vào và các trường mới được thêm vào . Giai đoạn $set là bí danh cho $addFields. Cả hai giai đoạn đều tương đương với giai đoạn $project chỉ định rõ ràng tất cả các trường hiện có trong tài liệu đầu vào và thêm các trường mới.

Làm cách nào để đặt loại dữ liệu trong MongoDB?

Sau đây là một số kiểu dữ liệu thường được sử dụng nhất trong MongoDB. .
Chuỗi. Một trong những kiểu dữ liệu cơ bản và được sử dụng rộng rãi nhất là chuỗi. .
số nguyên. Các giá trị số được lưu trữ bằng cách sử dụng kiểu dữ liệu số nguyên. .
Gấp đôi. .
Boolean. .
Mảng. .
Sự vật. .
Ngày. .
Dấu thời gian

Làm cách nào để đặt nhiều giá trị trong MongoDB?

Cập nhật nhiều trường của một tài liệu. Chúng ta có thể sử dụng toán tử $set và $inc để cập nhật bất kỳ trường nào trong MongoDB . Toán tử $set sẽ đặt giá trị mới được chỉ định trong khi toán tử $inc sẽ tăng giá trị theo một giá trị đã chỉ định.

Làm cách nào để đặt ObjectId trong MongoDB?

Các bước thực hiện như sau. .
Bước 1. Ở bước đầu tiên, bạn cần lưu trữ ObjectId vào một biến
Bước 2. Trong bước thứ hai, bạn cần đặt id mới
Bước 3. Ở bước thứ ba, bạn cần chèn id mới vào tài liệu
Bước 4. Ở bước thứ tư, bạn cần xóa id cũ