Các phương thức trong MongoDB Shell
- 11-05-2026
- Toanngo92
- 0 Comments
Mục lục
Mục tiêu học tập
Trong session này, học viên sẽ học:
- Liệt kê các phương thức MongoDB Shell khác nhau
- Mô tả các collection methods trong MongoDB Shell
- Giải thích các database methods khác nhau trong MongoDB Shell
- Giải thích các role management methods trong MongoDB Shell
- Mô tả các user management methods khác nhau trong MongoDB Shell
Như đã thảo luận ở session trước, MongoDB Shell là giao diện dòng lệnh cung cấp khả năng truy cập nhanh và dễ dàng đến cơ sở dữ liệu MongoDB. MongoDB Shell cung cấp nhiều collection methods để tạo, xoá, đổi tên và quản lý collection trong cơ sở dữ liệu. Nó cũng cung cấp database methods để tạo, chạy, xoá và lấy dữ liệu từ collection. Ngoài ra còn có role management methods và user management methods để tạo, cập nhật và xoá role cũng như user trong cơ sở dữ liệu. Session này sẽ cung cấp tổng quan về các phương thức MongoDB Shell khác nhau dùng để quản lý collection, user và role trong MongoDB.
6.1 Giới thiệu về MongoDB Shell Methods
MongoDB cung cấp tập hợp các phương thức hỗ trợ người dùng:
- Tạo, chèn, cập nhật và xoá document, collection và database
- Thay đổi cách query được thực thi
- Quản lý user và xác thực
- Cung cấp các role dựng sẵn và phân quyền dựa trên role
- Thực hiện các thao tác bulk
- Sao chép dữ liệu giữa nhiều MongoDB server
- Phân phối dữ liệu của tập dữ liệu rất lớn trên nhiều máy
Một số phương thức quan trọng được MongoDB cung cấp gồm:
- Collection Methods
- Cursor Methods
- Database Methods
- User Management Methods
- Role Management Methods
- Query Plan Cache Methods
- Bulk Operation Methods
- Replication Methods
- Sharding Methods
- Connection Methods
6.2 Các phương thức Collection
MongoDB cung cấp nhiều collection methods để thực hiện các thao tác CRUD (Create, Read, Update, Delete) đã được đề cập ở các session trước.
• Count
MongoDB cung cấp phương thức countDocuments để đếm số lượng document trong collection.
Cú pháp của phương thức countDocuments là:
db.collection.countDocuments(query, options)
Bảng 6.1 mô tả các tham số của phương thức countDocuments.
| Parameter | Fields | Type | Description |
|---|---|---|---|
| query | – | document | Xác định điều kiện dùng để đếm document; nếu để trống thì toàn bộ document sẽ được đếm |
| options | – | document | Cung cấp các trường tuỳ chọn |
| limit | integer | Xác định số lượng document tối đa cần đếm | |
| skip | integer | Xác định số lượng document cần bỏ qua trước khi bắt đầu đếm | |
| hint | string hoặc document | Chỉ định tên index sẽ được sử dụng trong query | |
| maxTimeMS | integer | Chỉ định thời gian tối đa mà query được phép chạy |
Bảng 6.1: Tham số của phương thức countDocuments
Trong database sample_analytics, giả sử người dùng muốn biết tổng số document trong collection accounts. Để đếm số lượng document, người dùng có thể chạy query:
db.accounts.countDocuments({})
Kết quả của query được hiển thị trong Figure 6.1.

Người dùng muốn biết tổng số document trong collection accounts có trường limit lớn hơn 10000.
Để lấy số lượng yêu cầu, thực hiện query:
db.accounts.countDocuments({ limit: { $gte: 10000}})
Kết quả của query được hiển thị trong Figure 6.2.

• Distinct
MongoDB cung cấp phương thức distinct để lấy các giá trị duy nhất của một field trong collection.
Cú pháp của phương thức distinct là:
db.collection.distinct(field, query, options)
Bảng 6.2 mô tả các tham số của phương thức distinct.
| Parameter | Fields | Type | Description |
|---|---|---|---|
| field | – | string | Xác định field cần lấy các giá trị distinct |
| query | – | document | Xác định điều kiện để lấy distinct values |
| options | collation | document | Chỉ định các quy tắc ngôn ngữ như chữ hoa/chữ thường |
Bảng 6.2: Tham số của phương thức distinct
Giả sử người dùng muốn lấy các giá trị distinct của field products trong document của collection accounts.
Để lấy kết quả mong muốn, thực hiện query:
db.accounts.distinct("products")
Kết quả của query được hiển thị trong Figure 6.3.

• Find and Update
MongoDB cung cấp phương thức findOneAndUpdate để tìm document và cập nhật các field dựa trên điều kiện được chỉ định.
Cú pháp của phương thức findOneAndUpdate là:
db.collection.findOneAndUpdate(filter, update, options)
Bảng 6.3 mô tả các tham số của phương thức findOneAndUpdate.
| Parameter | Fields | Type | Description |
|---|---|---|---|
| filter | – | document | Xác định điều kiện để document được cập nhật; nếu để trống thì document đầu tiên trong collection sẽ được cập nhật |
| update | – | document | Xác định các cập nhật cần thực hiện |
| options | – | document | Chỉ định các trường tuỳ chọn |
| projection | document | Xác định các field cần trả về; nếu bỏ qua thì trả về tất cả field | |
| sort | document | Xác định thứ tự sắp xếp các document phù hợp với filter | |
| maxTimeMS | number | Chỉ định thời gian tối đa (mili giây) mà query được phép chạy; vượt quá sẽ báo lỗi | |
| upsert | boolean | Chuyển update thành thao tác insert nếu không tồn tại document phù hợp với filter | |
| returnDocument | string | Xác định trả về document gốc hay document sau cập nhật | |
| returnNewDocument | boolean | Nếu đặt true thì trả về document sau cập nhật | |
| collation | document | Chỉ định quy tắc ngôn ngữ như chữ hoa/chữ thường | |
| arrayFilters | array | Chỉ định điều kiện cho các phần tử trong mảng cần được cập nhật |
Bảng 6.3: Tham số của phương thức findOneAndUpdate
Giả sử người dùng muốn tìm document trong collection accounts có giá trị trường account_id là 674364 và tăng giá trị trường limit thêm 500.
Để xem giá trị limit hiện tại trước khi cập nhật, thực hiện query:
db.accounts.find({ "account_id" : 674364 })
Kết quả của query được hiển thị trong Figure 6.4.

Giá trị của trường limit là 10000.
Để tăng giá trị trường limit thêm 500, thực hiện query:
db.accounts.findOneAndUpdate(
{ "account_id" : 674364 },
{ $inc : { "limit" : 500 } },
{ returnNewDocument:true }
)
Kết quả của query được hiển thị trong Figure 6.5.

Giá trị của trường limit được cập nhật thành 10500 trong document trả về. Ở đây, $inc là update operator và option returnNewDocument khi đặt là true sẽ đảm bảo document sau cập nhật được trả về.
• Find and Replace
MongoDB cung cấp phương thức findOneAndReplace để tìm document và thay thế document dựa trên điều kiện được chỉ định.
Cú pháp của phương thức findOneAndReplace là:
db.collection.findOneAndReplace(filter, replacement, options)
Bảng 6.4 mô tả các tham số của phương thức findOneAndReplace.
| Parameter | Fields | Type | Description |
|---|---|---|---|
| filter | – | document | Xác định điều kiện dùng để thay thế document; nếu để trống thì document đầu tiên trong collection sẽ được thay thế |
| replacement | – | document | Chỉ định document thay thế; giá trị _id trong document thay thế phải giống với document được thay thế |
| options | – | document | Chỉ định các trường tuỳ chọn |
| projection | document | Xác định các field sẽ được trả về |
| Parameter | Fields | Type | Description |
|---|---|---|---|
| options | sort | document | Xác định thứ tự sắp xếp các document phù hợp với điều kiện filter |
| maxTimeMS | number | Chỉ định thời gian tối đa (mili giây) mà query được phép chạy; nếu vượt quá sẽ phát sinh lỗi | |
| upsert | boolean | Chèn document được chỉ định trong tham số replacement nếu đặt true và không có document nào phù hợp với điều kiện trong filter | |
| returnDocument | string | Xác định trả về document gốc hay document đã cập nhật | |
• Nếu đặt là before thì document gốc được trả về | |||
• Nếu đặt là after thì document đã cập nhật được trả về | |||
• Có độ ưu tiên cao hơn tham số returnNewDocument | |||
| returnNewDocument | boolean | Lấy document đã thay thế nếu đặt true | |
| collation | document | Chỉ định các quy tắc ngôn ngữ như phân biệt chữ hoa/chữ thường |
Bảng 6.4: Tham số của phương thức findOneAndReplace
Giả sử người dùng muốn tìm tất cả document trong collection accounts mà trường limit lớn hơn 5000.
Trong document đầu tiên được trả về, người dùng muốn thay thế giá trị field products thành Commodity và field limit thành 2500.
Để xem toàn bộ document có giá trị limit lớn hơn 5000 trước khi thực hiện thao tác replace, người dùng có thể chạy query:
db.accounts.find({"limit":{$gte:5000}})
Kết quả của query được hiển thị trong Figure 6.6.

Trong document đầu tiên được trả về, giá trị field products là InvestmentStock và field limit là 10000.
Để thay thế giá trị field products thành Commodity và field limit thành 2500, người dùng có thể chạy query:
db.accounts.findOneAndReplace(
{ "limit" : { $gt : 5000 } },
{ "product" : "Commodity", "limit" : 2500 },
{ returnNewDocument:true }
)
Kết quả của query được hiển thị trong Figure 6.7.

Document đã được thay thế sẽ được trả về.
• Find and Delete
MongoDB cung cấp phương thức findOneAndDelete để tìm document và xoá document dựa trên điều kiện được chỉ định trong phương thức.
Cú pháp của phương thức findOneAndDelete là:
db.collection.findOneAndDelete(filter, options)
Bảng 6.5 mô tả các tham số của phương thức findOneAndDelete.
| Parameter | Fields | Type | Description |
|---|---|---|---|
| filter | – | document | Xác định điều kiện dùng để xoá document; nếu để trống thì document đầu tiên trong collection sẽ bị xoá |
Tiếp tục Table 6.5: Parameters for the findOneAndDelete Method
| Parameter | Fields | Type | Description |
|---|---|---|---|
| options | writeConcern | document | Chỉ định write concern của document |
| projection | document | Xác định các field sẽ được trả về | |
| sort | document | Xác định thứ tự sắp xếp các document phù hợp với filter | |
| maxTimeMS | number | Chỉ định thời gian tối đa (mili giây) mà query được phép chạy; nếu vượt quá sẽ phát sinh lỗi | |
| collation | document | Chỉ định các quy tắc ngôn ngữ như phân biệt chữ hoa/chữ thường |
Bảng 6.5: Tham số của phương thức findOneAndDelete
Giả sử người dùng muốn tìm tất cả document mà field products có giá trị "Commodity" và các document trả về được sắp xếp tăng dần theo field limit.
Để xoá document đầu tiên được trả về, người dùng có thể chạy query:
db.accounts.findOneAndDelete(
{ "products" : "Commodity"},
{sort: {"limit" : 1}}
)
Kết quả của query được hiển thị trong Figure 6.8.

Document đã xoá sẽ được trả về như là output của phương thức này.
6.3 Các phương thức Database
Các database methods do MongoDB cung cấp giúp tạo, chạy, xoá và lấy dữ liệu từ collection cũng như view trong database.
Một số database methods như:
db.dropDatabasedb.runCommanddb.createCollectiondb.getSiblingDB
đã được đề cập ở các session trước.
• Create View
View là các thực thể chỉ đọc (read-only entities) được tạo từ collection hoặc các view khác trong cùng database.
View được tạo bằng cách chạy aggregation pipeline trên source collection hoặc source view.
MongoDB cung cấp phương thức để tạo view dựa trên collection hoặc view khác.
Cú pháp tạo view là:
db.createView(view, source, pipeline, collation)
(or)
db.createCollection(view, source, pipeline, collation)
Bảng 6.6 mô tả các tham số của phương thức createView.
| Parameter | Type | Description |
|---|---|---|
| view | string | Xác định tên của view sẽ được tạo |
| source | string | Xác định tên source collection hoặc view dùng để tạo view |
| pipeline | array | Xác định mảng chứa các aggregation pipeline stages; không được chứa stage $out và $merge |
| collation | document | Chỉ định các quy tắc ngôn ngữ như phân biệt chữ hoa/chữ thường |
Bảng 6.6: Tham số của phương thức createView
Giả sử người dùng muốn tạo view tên AccountsLimit5000 từ collection accounts trong database sample_analytics.
View này chỉ chứa các document có giá trị field limit bằng 5000.
Để tạo view này, người dùng có thể thực hiện query:
db.accounts.createView(
"AccountsLimit5000",
"accounts",
[{ $match: { limit: 5000 }}]
)
Kết quả của query được hiển thị trong Figure 6.9.
Một view mới tên AccountsLimit5000 đã được tạo.
Để lấy document từ view này, người dùng có thể chạy query:
db.AccountsLimit5000.find()
Kết quả của query được hiển thị trong Figure 6.10.

• Get Collection Names
MongoDB cung cấp phương thức getCollectionNames để lấy tên của tất cả collection và view trong database.
Giả sử người dùng muốn lấy tên của tất cả collection và view trong database sample_analytics.
Để thực hiện tác vụ này, người dùng có thể chạy query:
db.getCollectionNames()
Kết quả của query được hiển thị trong Figure 6.11.

[ảnh minh họa]
- Figure 6.12 → Figure 6.18 (ảnh output MongoDB Shell)
• Check Connection
MongoDB cung cấp phương thức getMongo để kiểm tra kết nối giữa mongosh và database instance.
Để kiểm tra kết nối, người dùng có thể thực hiện query:
db.getMongo()
Kết quả của query được hiển thị trong Figure 6.12.

• Statistics
MongoDB cung cấp phương thức stats để trả về trạng thái sử dụng của database.
Để lấy thống kê sử dụng của database, người dùng có thể thực hiện query:
db.stats()
Kết quả của query được hiển thị trong Figure 6.13.

6.4 Role Management Methods
Các phương thức quản lý Role
Các role management methods do MongoDB cung cấp giúp tạo, cập nhật và xoá role.
Các phương thức này cũng hỗ trợ người dùng cấp và thu hồi quyền (privileges) cho role.
Hãy cùng tìm hiểu một số role management methods trong MongoDB.
• Create Role
MongoDB cung cấp phương thức tạo role trong database nơi phương thức được thực thi.
Cú pháp tạo role là:
db.createRole(role, writeConcern)
Bảng 6.7 mô tả các tham số của phương thức createRole.
| Parameter | Field | Type | Description |
|---|---|---|---|
| role | role | string | Xác định tên của role sẽ được tạo |
| privileges | array | Xác định các quyền sẽ được cấp cho role; nếu để trống thì không có quyền nào được cấp | |
| roles | array | Xác định mảng role mà role này sẽ kế thừa quyền; nếu để trống thì không kế thừa role nào | |
| authenticationRestrictions | array | Xác định các giới hạn xác thực áp dụng cho role | |
| writeConcern | – | document | Xác định mức độ write concern |
Bảng 6.7: Tham số của phương thức CreateRole
Giả sử người dùng muốn tạo một role mới tên mynewrole trên database sample_analytics từ database admin.
Để tạo role mới, người dùng có thể thực hiện query:
use admin
db.createRole({
role: "mynewrole",
privileges: [{
resource: { db: "sample_analytics", collection: "accounts" },
actions: ["update", "insert", "remove"]
},
{
resource: { db: "", collection: "" },
actions: ["find"]
}],
roles: [{ role: "readWrite", db: "sample_analytics" }]
},
{ w: "majority", wtimeout: 5000 })
Kết quả của query được hiển thị trong Figure 6.14.

Role mynewrole đã được tạo.
• Get Role
MongoDB cung cấp phương thức getRole để lấy các role mà quyền được kế thừa cho role này.
Cú pháp của phương thức này là:
db.getRole(rolename, arguments)
Bảng 6.8 mô tả các tham số của phương thức getRole.
| Parameter | Field | Type | Description |
|---|---|---|---|
| rolename | – | string | Xác định tên role |
| arguments | showAuthenticationRestrictions | boolean | Bao gồm địa chỉ IP mà người dùng của role này có thể kết nối tới database nếu đặt true |
| showBuiltinRoles | boolean | Bao gồm các built-in roles trong output nếu đặt true | |
| showPrivileges | boolean | Bao gồm direct privileges và inherited privileges từ role khác trong output nếu đặt true |
Bảng 6.8: Tham số của phương thức getRole
Giả sử người dùng muốn lấy thông tin chi tiết của role mynewrole.
Để thực hiện tác vụ này, người dùng có thể chạy query:
db.getRole("mynewrole")
Kết quả của query được hiển thị trong Figure 6.15.

Giả sử người dùng muốn lấy role và privileges của role mynewrole.
Để thực hiện tác vụ này, người dùng có thể chạy query:
db.getRole("mynewrole", { showPrivileges: true })
Kết quả của query được hiển thị trong Figure 6.16.

Role và privileges liên kết với role mynewrole sẽ được hiển thị trong output.
• Update Role
MongoDB cung cấp phương thức updateRole để cập nhật privileges, roles và restrictions của user-defined role.
Cú pháp của phương thức này là:
db.updateRole(rolename, update, writeConcern)
Bảng 6.9 mô tả các tham số của phương thức updateRole.
| Parameter | Field | Type | Description |
|---|---|---|---|
| rolename | – | string | Xác định tên của role |
| update | privileges | array | Xác định các quyền sẽ được cấp cho role; bắt buộc nếu không đề cập field roles |
| roles | array | Xác định các role mà role này kế thừa; bắt buộc nếu không đề cập field privileges | |
| authenticationRestrictions | array | Xác định các giới hạn xác thực áp dụng trên role như địa chỉ IP mà user của role này có thể kết nối tới database |
Bảng 6.9: Tham số của phương thức updateRole
Giả sử người dùng muốn cập nhật roles và privileges của role mynewrole.
Để thực hiện tác vụ này, người dùng có thể chạy query:
use admin
db.updateRole(
"mynewrole",
{
privileges: [{
resource: {
db: "sample_analytics",
collection: "accounts"
},
actions: [
"update",
"createCollection",
"createIndex"
]
}],
roles: [{
role: "read",
db: "sample_analytics"
}]
},
{ w: "majority" }
)
Kết quả của query được hiển thị trong Figure 6.17.

Để xem role sau khi cập nhật, người dùng có thể thực hiện query:
db.getRole("mynewrole")
Kết quả của query được hiển thị trong Figure 6.18.

Có thể thấy role mynewrole đã được cập nhật.
• Drop Role
MongoDB cung cấp phương thức dropRole để xoá user-defined role khỏi database nơi role được tạo.
Cú pháp của phương thức này là:
db.dropRole(rolename, writeConcern)
Bảng 6.10: Parameters of the dropRole Method
| Parameter | Field | Type | Description |
|---|---|---|---|
| role | role | string | Xác định tên role sẽ bị xoá |
| writeConcern | – | document | Xác định mức độ write concern |
Bảng 6.10: Tham số của phương thức dropRole
Giả sử người dùng muốn xoá role mynewrole khỏi database admin.
Để xoá role, người dùng có thể thực hiện query:
db.dropRole("mynewrole", { w: "majority" })
Kết quả của query được hiển thị trong Figure 6.19.

Role mynewrole đã bị xoá.
6.5 User Management Methods
Các phương thức quản lý User
Các user management methods do MongoDB cung cấp hỗ trợ:
- Tạo user
- Gán role cho user
- Đổi mật khẩu user
- Xoá user
Bây giờ hãy tìm hiểu một số user management methods trong MongoDB.
• Create User
MongoDB cung cấp phương thức createUser để tạo user trong database nơi phương thức được thực thi.
Cú pháp tạo user là:
db.createUser(user, writeConcern)
Bảng 6.11 mô tả các tham số của phương thức createUser.
| Parameter | Field | Type | Description |
|---|---|---|---|
| user | user | string | Xác định tên user sẽ được tạo |
| pwd | string | Xác định mật khẩu của user; có thể là chuỗi plaintext hoặc passwordPrompt để yêu cầu người dùng nhập mật khẩu | |
| customData | document | Chứa thông tin tuỳ chỉnh về user mà admin muốn lưu như employee ID hoặc họ tên đầy đủ của user | |
| roles | array | Xác định các role được gán cho user | |
| authenticationRestriction | array | Xác định các giới hạn xác thực áp dụng cho user | |
| writeConcern | – | document | Xác định mức độ write concern |
Bảng 6.11: Tham số của phương thức CreateUser
Giả sử người dùng muốn tạo user tên user_account1 với các role readWrite và dbAdmin cho collection accounts trong database sample_analytics.
Để tạo user mới, người dùng có thể thực hiện query:
db.createUser({
user: "user_account1",
pwd: passwordPrompt(),
roles: ["readWrite", "dbAdmin"]
})
Khi thực thi, query sẽ yêu cầu nhập mật khẩu.
Người dùng có thể nhập account1 làm mật khẩu.
Kết quả của query được hiển thị trong Figure 6.20.

User user_account1 đã được tạo.
Người dùng cũng có thể tạo user mà không cần chỉ định bất kỳ role nào.
• Change User Password
MongoDB cung cấp phương thức changeUserPassword để thay đổi mật khẩu của user được tạo trong database hiện tại.
Cú pháp của phương thức này là:
db.changeUserPassword(username, password)
Bảng 6.12 mô tả các tham số của phương thức changeUserPassword.
| Parameter | Type | Description |
|---|---|---|
| username | string | Xác định tên user cần thay đổi mật khẩu |
| password | string | Xác định mật khẩu mới của user; có thể là chuỗi plaintext hoặc passwordPrompt để yêu cầu nhập mật khẩu |
Bảng 6.12: Tham số của phương thức changeUserPassword
Giả sử người dùng muốn đổi mật khẩu cho user user_account1.
Để thay đổi mật khẩu, người dùng có thể thực hiện query:
db.changeUserPassword("user_account1", passwordPrompt())
Khi thực thi, query sẽ yêu cầu nhập mật khẩu.
Nhập user1 làm mật khẩu mới.
Kết quả của query được hiển thị trong Figure 6.21.

Mật khẩu của user user_account1 hiện đã được đổi thành user1.
• Get User
MongoDB cung cấp phương thức getUser để lấy thông tin user như:
- mật khẩu
- privileges
- custom data của user
Cú pháp của phương thức này là:
db.getUser(username, args)
Bảng 6.13 mô tả các tham số của phương thức getUser.
| Parameter | Field | Type | Description |
|---|---|---|---|
| username | – | string | Xác định tên user cần lấy thông tin |
| args | showCredentials | boolean | Hiển thị mật khẩu của user nếu đặt true |
| showCustomerData | boolean | Hiển thị dữ liệu custom của user nếu đặt true | |
| showPrivileges | boolean | Hiển thị toàn bộ privilege set của user nếu đặt true | |
| showAuthenticationRestrictions | boolean | Hiển thị các giới hạn xác thực của user như địa chỉ IP được phép kết nối tới database nếu đặt true |
Bảng 6.13: Tham số của phương thức getUser
Giả sử người dùng muốn lấy thông tin chi tiết của user user_account1 trong database sample_analytics.
Để thực hiện tác vụ này, người dùng có thể chạy query:
db.getUser("user_account1")
Kết quả của query được hiển thị trong Figure 6.22.

• Drop User
MongoDB cung cấp phương thức dropUser để xoá user khỏi database.
Cú pháp của phương thức này là:
db.dropUser(username, writeConcern)
Bảng 6.14 mô tả các tham số của phương thức dropUser.
| Parameter | Field | Type | Description |
|---|---|---|---|
| username | – | string | Xác định tên user cần xoá |
| args | showCredentials | boolean | Hiển thị mật khẩu của user nếu đặt true |
| showCustomerData | boolean | Hiển thị dữ liệu của user nếu đặt true | |
| showPrivileges | boolean | Hiển thị toàn bộ privilege set của user nếu đặt true | |
| showAuthenticationRestrictions | boolean | Hiển thị các giới hạn xác thực của user nếu đặt true |
Bảng 6.14: Tham số của phương thức dropUser
Giả sử người dùng muốn xoá user user_account1 trong database sample_analytics.
Để thực hiện tác vụ này, người dùng có thể chạy query:
db.dropUser(
"user_account1",
{w: "majority", wtimeout: 5000}
)
Kết quả của query được hiển thị trong Figure 6.23.

6.6 Bulk Operation Methods
Các phương thức Bulk Operation
Bulk operations được thiết kế để thực thi nhiều thao tác ghi (insert, update và delete) trong một request duy nhất gửi tới server.
Điều này cải thiện hiệu suất bằng cách:
- Giảm số lần network round-trip
- Cho phép MongoDB tối ưu quá trình thực thi nội bộ
Các bulk operation methods trong MongoDB gồm:
• Ordered Bulk Operations
Trong MongoDB, ordered bulk operations được thực thi tuần tự theo đúng thứ tự đã định nghĩa và việc thực thi sẽ dừng ngay lập tức nếu xảy ra lỗi.
Chế độ này hữu ích khi các thao tác phía sau phụ thuộc vào thao tác trước đó, đảm bảo tính nhất quán và ngăn việc cập nhật một phần.
• Unordered Bulk Operations
Trong MongoDB, bulk operations có thể chạy ở unordered mode, nơi các thao tác được thực thi song song mà không đảm bảo thứ tự.
Lỗi trong một thao tác sẽ không làm dừng các thao tác khác.
Điều này giúp chế độ này hiệu quả cho các thao tác insert, update hoặc delete quy mô lớn khi có thể chấp nhận thất bại từng phần.
Mục tiêu là đạt throughput tối đa, giúp hiệu quả cho insert, update hoặc delete số lượng lớn.
Để thực hiện bulk operations, MongoDB có hai cách tiếp cận:
- Single-Collection Bulk Operations
- Multi-Collection Bulk Operations
• Single-Collection Bulk Operations
MongoDB sử dụng phương thức bulkWrite() cho Single-Collection Bulk Operations.
Cú pháp của phương thức này là:
db.collection.bulkWrite(
[
{ <operation1> },
{ <operation2> },
...
],
{
ordered: <boolean>,
writeConcern: <document>
}
)
Bảng 6.15 mô tả các tham số của phương thức bulkWrite.
| Parameter | Type | Description |
|---|---|---|
| Operations | array | Mảng các thao tác ghi sẽ được thực thi (ví dụ: insertOne, updateOne, updateMany, replaceOne, deleteOne, deleteMany) |
| Ordered | boolean | Xác định thứ tự thực thi. Nếu đặt true, các thao tác được thực hiện tuần tự và dừng tại lỗi đầu tiên. Nếu đặt false, các thao tác được thực thi song song và tiếp tục dù có lỗi. Giá trị mặc định là true |
| WriteConcern | document | Xác định mức acknowledgement mà MongoDB yêu cầu cho các thao tác (ví dụ { w: 1 }, { w: "majority" }) |
Bảng 6.15: Tham số của phương thức bulkWrite
Giả sử người dùng muốn thực hiện nhiều thao tác như insert, update và delete document trong collection users.
Để thực hiện tác vụ này trong một batch duy nhất, người dùng có thể chạy query:
db.users.bulkWrite([
{
insertOne: {
document: {
name: "Alice George",
age: 30
}
}
},
{
updateOne: {
filter: { name: "Alice" },
update: {
$set: { age: 35 }
}
}
},
{
deleteOne: {
filter: { name: "Bob Turner" }
}
}
])
Kết quả của query được hiển thị trong Figure 6.24.

• Multi-Collection Bulk Operations
MongoDB sử dụng phương thức adminCommand() cho Multi-Collection Bulk Operations.
Cú pháp của phương thức này là:
db.adminCommand({
bulkWrite: 1,
ops: [ ... ],
ordered: true/false
})
Bảng 6.16 mô tả các tham số của phương thức adminCommand.
| Parameter | Type | Description |
|---|---|---|
| bulkWrite | integer | Phải đặt bằng 1 để biểu thị việc thực thi bulk write command trên nhiều collection |
| ops | Array | Mảng các thao tác ghi. Mỗi thao tác phải bao gồm collection đích (insert, update, delete, …) cùng document/filter tương ứng |
| ordered | boolean | Nếu true, các thao tác sẽ được thực thi tuần tự và dừng ở lỗi đầu tiên. Nếu false, các thao tác chạy độc lập và tiếp tục ngay cả khi một số thao tác thất bại |
Bảng 6.16: Tham số của phương thức adminCommand
Giả sử người dùng muốn chèn một user mới vào collection users và đồng thời cập nhật login statistics của họ trong collection loginStats.
Để thực hiện tác vụ này trong một batch duy nhất, người dùng có thể chạy query:
db.adminCommand({
bulkWrite: 1,
ops: [
{
insert: 0,
document: {
_id: 103,
name: "Devid Miller"
}
},
{
update: 1,
filter: {
userId: 103
},
updateMods: {
$inc: {
loginCount: 1
}
}
}
],
nsInfo: [
{ ns: "testdb.users" },
{ ns: "testdb.loginStats" }
]
})
Kết quả của query được hiển thị trong Figure 6.25.


