Sau đây là những khác biệt về chức năng giữa Amazon DocumentDB [có khả năng tương thích với MongoDB] và MongoDB
Lợi ích chức năng của Amazon DocumentDB
Giao dịch ngầm
Trong Amazon DocumentDB, tất cả các câu lệnh CRUD [
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
2, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
3, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
4, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
5] đảm bảo tính nguyên tử và tính nhất quán, ngay cả đối với các hoạt động sửa đổi nhiều tài liệu. Với sự ra mắt của Amazon DocumentDB 4. 0, các giao dịch rõ ràng cung cấp các thuộc tính ACID cho các hoạt động đa câu lệnh và nhiều bộ sưu tập hiện được hỗ trợ. Để biết thêm về cách sử dụng giao dịch trong Amazon DocumentDB, vui lòng xem Giao dịchSau đây là các ví dụ về hoạt động trong Amazon DocumentDB sửa đổi nhiều tài liệu đáp ứng cả hành vi nguyên tử và hành vi nhất quán
db.miles.update[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } },
{ multi: true }
]
______5db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
Các hoạt động riêng lẻ tạo thành các hoạt động hàng loạt như
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
6 và db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
7 là nguyên tử nhưng toàn bộ hoạt động hàng loạt không phải là nguyên tử. Ví dụ: toàn bộ thao tác db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
8 là nguyên tử nếu các thao tác chèn riêng lẻ thực hiện thành công mà không có lỗi. Nếu gặp lỗi với thao tác db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
8, mỗi câu lệnh chèn riêng lẻ trong thao tác db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
8 sẽ thực thi như một thao tác nguyên tử. Nếu bạn yêu cầu các thuộc tính ACID cho các hoạt động của db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
8, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
6 và db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
7, bạn nên sử dụng một giao dịchAmazon DocumentDB tiếp tục cải thiện khả năng tương thích với MongoDB bằng cách làm ngược lại các khả năng mà khách hàng yêu cầu chúng tôi xây dựng. Phần này chứa các điểm khác biệt về chức năng mà chúng tôi đã loại bỏ trong Amazon DocumentDB để giúp việc di chuyển và xây dựng ứng dụng dễ dàng hơn cho khách hàng của chúng tôi
Lập chỉ mục mảng
Kể từ ngày 23 tháng 4 năm 2020, Amazon DocumentDB hiện hỗ trợ khả năng lập chỉ mục các mảng lớn hơn 2.048 byte. Giới hạn cho một mục riêng lẻ trong một mảng vẫn là 2.048 byte, phù hợp với MongoDB
Nếu bạn đang tạo một chỉ mục mới, bạn không cần thực hiện hành động nào để tận dụng chức năng được cải thiện. Nếu bạn có một chỉ mục hiện có, bạn có thể tận dụng lợi thế của chức năng được cải thiện bằng cách bỏ chỉ mục rồi tạo lại nó. Phiên bản chỉ mục hiện tại với các khả năng được cải thiện là
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
4Đối với các cụm sản xuất, việc giảm chỉ mục có thể ảnh hưởng đến hiệu suất ứng dụng của bạn. Chúng tôi khuyên bạn nên kiểm tra trước và tiến hành thận trọng khi thực hiện các thay đổi đối với hệ thống sản xuất. Ngoài ra, thời gian cần thiết để tạo lại chỉ mục sẽ là một chức năng của kích thước dữ liệu tổng thể của bộ sưu tập
Bạn có thể truy vấn phiên bản chỉ mục của mình bằng lệnh sau
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
8Đầu ra từ hoạt động này trông giống như sau. Trong kết quả này, phiên bản của chỉ mục là
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
4, đây là phiên bản chỉ mục mới nhấtdb.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
0Chỉ mục đa phím
Kể từ ngày 23 tháng 4 năm 2020, Amazon DocumentDB hiện hỗ trợ khả năng tạo chỉ mục phức hợp với nhiều khóa trong cùng một mảng
Nếu bạn đang tạo một chỉ mục mới, bạn không cần thực hiện hành động nào để tận dụng chức năng được cải thiện. Nếu bạn có một chỉ mục hiện có, bạn có thể tận dụng lợi thế của chức năng được cải thiện bằng cách bỏ chỉ mục rồi tạo lại nó. Phiên bản chỉ mục hiện tại với các khả năng được cải thiện là
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
4Đối với các cụm sản xuất, việc giảm chỉ mục có thể ảnh hưởng đến hiệu suất ứng dụng của bạn. Chúng tôi khuyên bạn nên kiểm tra trước và tiến hành thận trọng khi thực hiện các thay đổi đối với hệ thống sản xuất. Ngoài ra, thời gian cần thiết để tạo lại chỉ mục sẽ là một chức năng của kích thước dữ liệu tổng thể của bộ sưu tập
Bạn có thể truy vấn phiên bản chỉ mục của mình bằng lệnh sau
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
8Đầu ra từ hoạt động này trông giống như sau. Trong kết quả này, phiên bản của chỉ mục là
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
4, đây là phiên bản chỉ mục mới nhấtdb.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
4Ký tự Null trong chuỗi
Kể từ ngày 22 tháng 6 năm 2020, Amazon DocumentDB hiện hỗ trợ ký tự rỗng [
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
8 ] trong chuỗiKiểm soát truy cập dựa trên vai trò
Kể từ ngày 26 tháng 3 năm 2020, Amazon DocumentDB hỗ trợ kiểm soát truy cập dựa trên vai trò [RBAC] cho các vai trò tích hợp. Để tìm hiểu thêm, hãy xem Kiểm soát truy cập dựa trên vai trò. Amazon DocumentDB chưa hỗ trợ vai trò tùy chỉnh cho RBAC
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
9 lập chỉ mục
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
Kể từ ngày 22 tháng 6 năm 2020, Amazon DocumentDB hiện hỗ trợ khả năng cho người vận hành
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
9 sử dụng chỉ mụcĐể sử dụng một chỉ mục với toán tử
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
9, bạn phải sử dụng lệnh db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
2. Khi sử dụng db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
2, bạn phải chỉ định tên của trường bạn đang áp dụng db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
9 trên. Ví dụ: nếu bạn có một chỉ mục trên trường db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
5 với tên chỉ mục là db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
6, thì db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
7 sẽ sử dụng chỉ mục của db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
6, nhưng db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
9 sẽ không sử dụng chỉ mục đó. Bạn có thể xác minh xem một chỉ mục có được chọn hay không bằng cách sử dụng lệnh db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
80 hoặc sử dụng trình lược tả để ghi lại các truy vấn chậm. Ví dụ, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
81Phương pháp
db.runCommand[{
delete: "products",
deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
}]
2 chỉ có thể được sử dụng với một chỉ mục tại một thời điểmViệc sử dụng chỉ mục cho truy vấn
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
9 được tối ưu hóa cho các truy vấn biểu thức chính quy sử dụng tiền tố và không chỉ định các tùy chọn biểu thức chính quy db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
84, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
85 hoặc db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
86Khi sử dụng chỉ mục với
db.products.deleteMany[{
"cost": { $gt: 30.00 }
}]
9, bạn nên tạo chỉ mục trên các trường có tính chọn lọc cao, nơi số lượng giá trị trùng lặp nhỏ hơn 1% tổng số tài liệu trong bộ sưu tập. Ví dụ: nếu bộ sưu tập của bạn chứa 100.000 tài liệu, chỉ tạo chỉ mục trên các trường có cùng một giá trị xảy ra 1000 lần hoặc ít hơnPhép chiếu cho các tài liệu lồng nhau
Có sự khác biệt về chức năng với toán tử
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
88 giữa Amazon DocumentDB và MongoDB trong phiên bản 3. 6 đã được giải quyết trong Amazon DocumentDB 4. 0 nhưng sẽ vẫn không được hỗ trợ trong Amazon DocumentDB 3. 6Tài liệu AmazonDB 3. 6 chỉ xem xét trường đầu tiên trong tài liệu lồng nhau khi áp dụng phép chiếu trong khi MongoDB 3. 6 sẽ phân tích các tài liệu con và cũng áp dụng phép chiếu cho từng tài liệu con
Ví dụ. nếu phép chiếu là
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
89, thì hành vi sẽ hoạt động như mong đợi trong cả Amazon DocumentDB và MongoDB. Tuy nhiên, nếu phép chiếu là db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
00 thì Amazon DocumentDB 3. 6 sẽ chỉ áp dụng phép chiếu cho db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
01 chứ không phải db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
02 hoặc db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
03. Trong Tài liệu AmazonDB 4. 0, phép chiếu db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
00 sẽ được áp dụng cho db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
01, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
02 và db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
03Sự khác biệt về chức năng với MongoDB
Cơ sở dữ liệu quản trị và bộ sưu tập
Amazon DocumentDB không hỗ trợ quản trị viên hoặc cơ sở dữ liệu cục bộ cũng như bộ sưu tập MongoDB
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
08 hoặc db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
09 tương ứngTrong Amazon DocumentDB,
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
80 đặt lại bộ đếm cho mỗi yêu cầu db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
81. Do đó, nếu một 3000MS db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
82 được chỉ định, truy vấn sẽ mất 2800MS và mỗi yêu cầu db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
81 tiếp theo sẽ mất 300MS, sau đó con trỏ sẽ không hết thời gian chờ. Con trỏ sẽ chỉ hết thời gian chờ khi một thao tác đơn lẻ, hoặc là truy vấn hoặc một yêu cầu db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
81 riêng lẻ, chiếm nhiều hơn thời gian db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
82 đã chỉ định. Hơn nữa, trình quét kiểm tra thời gian thực hiện con trỏ chạy ở mức độ chi tiết nhỏgiải thích[]
Amazon DocumentDB giả lập MongoDB 4. 0 trên một công cụ cơ sở dữ liệu được xây dựng có mục đích sử dụng hệ thống lưu trữ phân tán, chịu lỗi, tự phục hồi. Do đó, kế hoạch truy vấn và đầu ra của
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
80 có thể khác nhau giữa Amazon DocumentDB và MongoDB. Những khách hàng muốn kiểm soát kế hoạch truy vấn của họ có thể sử dụng toán tử db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
87 để thực thi lựa chọn chỉ mục ưa thíchGiới hạn tên trường
Amazon DocumentDB không hỗ trợ dấu chấm “. ” trong tên trường tài liệu, ví dụ:
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
88Amazon DocumentDB cũng không hỗ trợ tiền tố $ trong tên trường
Ví dụ: hãy thử lệnh sau trong Amazon DocumentDB hoặc MongoDB
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
6MongoDB sẽ trả về như sau
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
0Amazon DocumentDB sẽ trả về lỗi
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
1Có một ngoại lệ cho sự khác biệt chức năng này. Các tên trường bắt đầu bằng tiền tố $ sau đây đã được đưa vào danh sách cho phép và có thể được sử dụng thành công trong Amazon DocumentDB. $id, $ref và $db
Bản dựng chỉ mục
Amazon DocumentDB chỉ cho phép xây dựng một chỉ mục trên một bộ sưu tập tại bất kỳ thời điểm nào. Ở phía trước hoặc phía sau. Nếu các thao tác như
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
89 hoặc db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
40 xảy ra trên cùng một bộ sưu tập khi quá trình xây dựng chỉ mục hiện đang được tiến hành, thì thao tác mới thử sẽ không thành côngTheo mặc định, chỉ mục được xây dựng trong Amazon DocumentDB và MongoDB phiên bản 4. 0 xảy ra trong nền. MongoDB phiên bản 4. 2 và sau đó bỏ qua tùy chọn xây dựng chỉ mục nền nếu được chỉ định để tạoChỉ mục hoặc trình trợ giúp trình bao của nó
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
89 và db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
42Chỉ mục Thời gian tồn tại [TTL] bắt đầu hết hạn tài liệu sau khi quá trình xây dựng chỉ mục hoàn tất
Tra cứu với phím trống trong đường dẫn
Khi bạn tra cứu bằng một khóa bao gồm chuỗi rỗng như một phần của đường dẫn [e. g.
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
43, db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
44] và đối tượng có đường dẫn khóa chuỗi trống [e. g. db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
45] bên trong một mảng, Amazon DocumentDB sẽ trả về các kết quả khác so với khi bạn chạy cùng một tra cứu trong MongoDBTrong MongoDB, đường dẫn khóa trống tra cứu trong mảng hoạt động như mong đợi khi khóa chuỗi trống không ở cuối đường dẫn tra cứu. Tuy nhiên, khi khóa chuỗi trống ở cuối đường dẫn tra cứu, nó không nhìn vào mảng
Tuy nhiên, trong Amazon DocumentDB, chỉ phần tử đầu tiên trong mảng được đọc, vì
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
46 chuyển đổi chuỗi rỗng thành db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
47, do đó, việc tra cứu khóa chuỗi được coi là tra cứu chỉ mục mảngMongoDB API, hoạt động và kiểu dữ liệu
Amazon DocumentDB tương thích với MongoDB 3. 6 và 4. 0 API. Để biết danh sách cập nhật các chức năng được hỗ trợ, hãy xem API, Hoạt động và Loại dữ liệu MongoDB được hỗ trợ
Tiện ích db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
48 và db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
49
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
Amazon DocumentDB không hỗ trợ cơ sở dữ liệu quản trị và do đó không kết xuất hoặc khôi phục cơ sở dữ liệu quản trị khi sử dụng tiện ích
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
48 hoặc db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
49. Khi tạo cơ sở dữ liệu mới trong Amazon DocumentDB bằng cách sử dụng db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
49, ngoài thao tác khôi phục, bạn cần tạo lại vai trò người dùngThứ tự kết quả
Amazon DocumentDB không đảm bảo thứ tự sắp xếp kết quả ngầm định của tập hợp kết quả. Để đảm bảo thứ tự của tập kết quả, hãy chỉ định rõ ràng thứ tự sắp xếp bằng cách sử dụng
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
63Ví dụ sau sắp xếp các mục trong bộ sưu tập hàng tồn kho theo thứ tự giảm dần dựa trên trường chứng khoán
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
2Khi sử dụng giai đoạn tổng hợp
db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
64, thứ tự sắp xếp không được giữ nguyên trừ khi giai đoạn db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
64 là giai đoạn cuối cùng trong quy trình tổng hợp. Khi sử dụng giai đoạn tổng hợp db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
64 kết hợp với giai đoạn tổng hợp db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
67, giai đoạn tổng hợp db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
64 chỉ được áp dụng cho bộ tích lũy db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
69 và db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
00. Trong Tài liệu AmazonDB 4. 0, hỗ trợ đã được thêm vào cho db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
01 để tôn trọng thứ tự sắp xếp từ giai đoạn db.runCommand[{
update: "miles",
updates: [
{
q: { "credit_card": { $eq: true } },
u: { $mul: { "flight_miles.$[]": NumberInt[2] } },
multi: true
}
]
}]
64 trước đóGhi có thể thử lại
Bắt đầu với MongoDB 4. 2 trình điều khiển tương thích, tính năng ghi có thể thử lại được bật theo mặc định. Tuy nhiên, Amazon DocumentDB hiện không hỗ trợ ghi có thể thử lại. Sự khác biệt về chức năng sẽ tự biểu hiện trong một thông báo lỗi tương tự như sau
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
3Ghi có thể thử lại có thể bị vô hiệu hóa thông qua chuỗi kết nối [ví dụ:
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
03 hoặc đối số từ khóa của hàm tạo MongoClient [ví dụ: db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
04Sau đây là một ví dụ Python tắt tính năng ghi có thể thử lại trong chuỗi kết nối
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
4Chỉ mục thưa thớt
Để sử dụng chỉ mục thưa thớt mà bạn đã tạo trong truy vấn, bạn phải sử dụng mệnh đề
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
05 trên các trường bao gồm chỉ mục. Nếu bạn bỏ qua db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
05, Amazon DocumentDB sẽ không sử dụng chỉ mục thưa thớtSau đây là một ví dụ
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
5Đối với các chỉ mục nhiều khóa, thưa thớt, Amazon DocumentDB không hỗ trợ ràng buộc khóa duy nhất nếu quá trình tra cứu tài liệu dẫn đến một tập hợp các giá trị và chỉ thiếu một tập hợp con của các trường được lập chỉ mục. Ví dụ:
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
07 không được hỗ trợ, với đầu vào là db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
08, vì db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
09 được lưu trữ trong chỉ mụcnén lưu trữ
Amazon DocumentDB hiện không hỗ trợ tính năng nén cho dữ liệu được lưu trữ hoặc chỉ mục. Kích thước dữ liệu cho dữ liệu được lưu trữ và chỉ mục có thể lớn hơn so với khi bạn sử dụng các tùy chọn khác
Sử dụng $elemMatch trong một Biểu thức $all
Amazon DocumentDB hiện không hỗ trợ việc sử dụng toán tử
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
10 trong biểu thức db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
11. Như một giải pháp thay thế, bạn có thể sử dụng toán tử db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
12 với db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
10 như sauhoạt động ban đầu
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
6hoạt động cập nhật
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
7Lập chỉ mục db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
14, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
15, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
16, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
17, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
05 và db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
10
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
Amazon DocumentDB hiện không hỗ trợ khả năng sử dụng chỉ mục với các toán tử
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
14, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
15, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
16, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
17, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
05, db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
25 và db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
10. Do đó, việc sử dụng các toán tử này sẽ dẫn đến việc quét bộ sưu tập. Thực hiện bộ lọc hoặc khớp trước khi sử dụng một trong các toán tử này sẽ giảm lượng dữ liệu cần quét và do đó có thể cải thiện hiệu suấtdb.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
27
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
Amazon DocumentDB hỗ trợ khả năng thực hiện khớp đẳng thức [ví dụ: nối ngoài bên trái] nhưng không hỗ trợ các truy vấn con không tương quan
Sử dụng một chỉ mục với db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
27
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
Bây giờ bạn có thể sử dụng chỉ mục với toán tử giai đoạn
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
27. Dựa trên trường hợp sử dụng của bạn, có nhiều thuật toán lập chỉ mục mà bạn có thể sử dụng để tối ưu hóa hiệu suất. Phần này sẽ giải thích các thuật toán lập chỉ mục khác nhau cho db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
27 và giúp bạn chọn thuật toán lập chỉ mục tốt nhất cho khối lượng công việc của mìnhTheo mặc định, Amazon DocumentDB sẽ sử dụng thuật toán băm khi sử dụng
db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
31 và hợp nhất sắp xếp khi sử dụng db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
32. Đối với một số trường hợp sử dụng, có thể nên buộc trình tối ưu hóa truy vấn sử dụng một thuật toán khác. Dưới đây là các thuật toán lập chỉ mục khác nhau mà toán tử tổng hợp db.miles.updateMany[
{ "credit_card": { $eq: true } },
{ $mul: { "flight_miles.$[]": NumberInt[2] } }
]
27 có thể sử dụng- Vòng lặp lồng nhau. Gói vòng lặp lồng nhau thường có lợi cho khối lượng công việc nếu bộ sưu tập nước ngoài