Tài liệu về nhà → Hướng dẫn sử dụng MongoDB → MongoDB Manual
$or
Trình điều khiển $or
thực hiện hoạt động logic OR
trên một mảng một hoặc nhiều ____10 và chọn các tài liệu đáp ứng ít nhất một trong số ____10. $or
có cú pháp sau:The
$or
operator performs a logical OR
operation on an array of one or more
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
0 and selects the documents that satisfy at least one of the db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
0. The $or
has the following syntax:{ $or: [ { }, { }, ... , { } ] }
Xem xét ví dụ sau:
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
Truy vấn này sẽ chọn tất cả các tài liệu trong bộ sưu tập
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
3 trong đó giá trị trường db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
4 nhỏ hơn db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
5 hoặc giá trị trường db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
6 bằng db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7.or the db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
6 field value equals db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7.Khi đánh giá các mệnh đề trong biểu thức $or
, MongoDB sẽ thực hiện quét thu thập hoặc, nếu tất cả các mệnh đề được hỗ trợ bởi các chỉ mục, MongoDB thực hiện quét chỉ mục. Đó là, để MongoDB sử dụng các chỉ mục để đánh giá biểu thức $or
, tất cả các mệnh đề trong biểu thức $or
phải được hỗ trợ bởi các chỉ mục. Nếu không, MongoDB sẽ thực hiện quét bộ sưu tập.$or
expression, MongoDB either performs a collection scan or, if
all the clauses are supported by indexes, MongoDB performs index scans. That is, for MongoDB to use indexes to evaluate an $or
expression, all the clauses in the $or
expression must be supported by indexes. Otherwise, MongoDB will
perform a collection scan.
Khi sử dụng các chỉ mục với các truy vấn $or
, mỗi mệnh đề của $or
có thể sử dụng chỉ mục của riêng mình. Xem xét các truy vấn sau:$or
queries, each clause of an $or
can use its own index. Consider the following query:
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
Để hỗ trợ truy vấn này, thay vì chỉ mục ghép, bạn sẽ tạo một chỉ mục trên
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
4 và một chỉ mục khác trên db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
6:db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ]
MongoDB có thể sử dụng tất cả trừ Chỉ số GeoHaystack để hỗ trợ các điều khoản $or
.$or
clauses.
Nếu $or
bao gồm truy vấn
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7, tất cả các điều khoản trong mảng $or
phải được hỗ trợ bởi một chỉ mục. Điều này là do truy vấn db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7 phải sử dụng chỉ mục và $or
chỉ có thể sử dụng các chỉ mục nếu tất cả các mệnh đề của nó được hỗ trợ bởi các chỉ mục. Nếu truy vấn db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7 không thể sử dụng chỉ mục, truy vấn sẽ trả về lỗi.$or
includes a db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7 query, all clauses in the $or
array must be supported by an index. This is because a db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7 query must use an index, and $or
can only use indexes if all its clauses are supported by indexes. If the
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
7 query cannot use an index, the query will return an error.$or
hỗ trợ các mệnh đề không gian địa lý với ngoại lệ sau cho mệnh đề gần [mệnh đề gần bao gồm
3 và db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ]
4]. db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ] $or
không thể chứa một mệnh đề gần với bất kỳ mệnh đề nào khác. supports geospatial clauses with the
following exception for the near clause [near clause includes
db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ]
3 and db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ]
4]. $or
cannot contain a near
clause with any other clause.Khi thực hiện các truy vấn $or
với
db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ]
7, MongoDB hiện có thể sử dụng các chỉ mục hỗ trợ các điều khoản $or
. Các phiên bản trước không sử dụng các chỉ mục.$or
queries with a db.inventory.createIndex[ { quantity: 1 } ] db.inventory.createIndex[ { price: 1 } ]
7, MongoDB can now use indexes that support the
$or
clauses. Previous versions did not use the indexes.Bạn có thể tạo các chỉ mục một phần với $or
. Sử dụng phương thức
db.inventory.find [ { quantity: { $in: [20, 50] } } ]
0 của phương thức db.collection.CreateIndex [] để tạo chỉ mục một phần.$or
. Use the db.inventory.find [ { quantity: { $in: [20, 50] } } ]
0 of the db.collection.createIndex[] method to create a partial index.Khi sử dụng $or
với
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
0 là kiểm tra bình đẳng cho giá trị của cùng một trường, hãy sử dụng toán tử db.inventory.find [ { quantity: { $in: [20, 50] } } ]
3 thay vì toán tử $or
.$or
with db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
0 that are equality checks for the value of the same field, use the db.inventory.find [ { quantity: { $in: [20, 50] } } ]
3 operator instead of the
$or
operator.Ví dụ: để chọn tất cả các tài liệu trong bộ sưu tập
db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
3 trong đó giá trị trường db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
4 bằng db.inventory.find[ { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ]
5 hoặc db.inventory.find [ { quantity: { $in: [20, 50] } } ]
8, hãy sử dụng toán tử db.inventory.find [ { quantity: { $in: [20, 50] } } ]
3:db.inventory.find [ { quantity: { $in: [20, 50] } } ]
Bạn có thể làm tổ $or
hoạt động.$or
operations.
Mẹo
Để cho phép công cụ truy vấn tối ưu hóa các truy vấn, $or
xử lý các lỗi như sau:
Nếu bất kỳ biểu thức nào được cung cấp cho
$or
sẽ gây ra lỗi khi được đánh giá một mình,$or
chứa biểu thức có thể gây ra lỗi nhưng không được đảm bảo lỗi.Một biểu thức được cung cấp sau biểu thức đầu tiên được cung cấp cho
$or
có thể gây ra lỗi ngay cả khi biểu thức đầu tiên đánh giá là
5.db.example.find[ { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ]
Ví dụ: truy vấn sau luôn tạo ra lỗi nếu
db.example.find[ { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ]
6 là db.example.find[ { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ]
7:db.example.find[ { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ]
Truy vấn sau, chứa nhiều biểu thức được cung cấp cho $or
, có thể gây ra lỗi nếu có bất kỳ tài liệu nào trong đó
db.example.find[ { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ]
6 là db.example.find[ { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ]
7:db.example.find[ { $or: [ { x: { $eq: 0 } }, { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ] } ]