Hướng dẫn mongodb and $or - mongodb và $or

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB 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:
Hướng dẫn mongodb and $or - mongodb và $or

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

db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
3 và
db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
4). $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à

    db.example.find( {
    $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
    } )
    5.

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 ] } }
]
} )