MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ và Nhà điều hành đường ống tổng hợp

Trong MongoDB, $and toán tử đường ống tổng hợp đánh giá một hoặc nhiều biểu thức và trả về true nếu tất cả chúng đều đánh giá là true , hoặc nếu nó được gọi mà không có đối số. Nếu không, nó trả về false .

Cú pháp

Cú pháp như sau:

{ $and: [ <expression1>, <expression2>, ... ] }

Ví dụ

Giả sử chúng ta có một tập hợp được gọi là data với tài liệu sau:

{ "_id" : 1, "a" : 10, "b" : 2, "c" : 20 }

Đây là những gì sẽ xảy ra khi chúng tôi sử dụng $and để kiểm tra hai điều kiện đối với tài liệu đó:

db.data.aggregate(
   [
     { $match: { _id: 1 } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $and: [ 
              { $gt: [ "$a", 9 ] }, 
              { $lt: [ "$b", 3 ] } 
            ] } 
          } 
         }
   ]
)

Kết quả:

{ "a" : 10, "b" : 2, "result" : true }

Chúng ta có thể thấy rằng $and trả về true .

Nhiều hơn hai đối số

Như đã đề cập, $and chấp nhận một hoặc nhiều biểu thức. Ví dụ trước sử dụng hai biểu thức. Dưới đây là một ví dụ sử dụng ba:

db.data.aggregate(
   [
     { $match: { _id: 1 } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        c: 1,
        result: { $and: [ 
              { $gt: [ "$a", 9 ] }, 
              { $lt: [ "$b", 3 ] }, 
              { $gt: [ "$c", 30 ] } 
            ] } 
          } 
         }
   ]
)

Kết quả:

{ "a" : 10, "b" : 2, "c" : 20, "result" : false }

Trong trường hợp này, kết quả là false , bởi vì biểu thức thứ ba đánh giá thành false . Nếu một biểu thức cho kết quả là false , thì kết quả là false ($and cần tất cả các biểu thức phải là true trước khi nó có thể trả về true ).

Một đối số

Cho rằng $and chấp nhận một hoặc nhiều biểu thức, có thể cung cấp một đối số duy nhất.

Ví dụ:

db.data.aggregate(
   [
     { $match: { _id: 1 } },
     { $project: { 
        _id: 0,
        a: 1,
        result: { $and: [ { $gt: [ "$a", 9 ] } ] } } 
         }
   ]
)

Kết quả:

{ "a" : 10, "result" : true }

Các giá trị bằng 0, rỗng và không xác định

$and toán tử đánh giá 0 , nullundefined dưới dạng false .

Giả sử chúng ta có các tài liệu sau:

{ "_id" : 2, "a" : 0, "b" : 2 }
{ "_id" : 3, "a" : 10, "b" : 0 }
{ "_id" : 4, "a" : 0, "b" : 0 }
{ "_id" : 5, "a" : null, "b" : 2 }
{ "_id" : 6, "a" : 10, "b" : null }
{ "_id" : 7, "a" : null, "b" : null }
{ "_id" : 8, "a" : undefined, "b" : 2 }
{ "_id" : 9, "a" : 10, "b" : undefined }
{ "_id" : 10, "a" : undefined, "b" : undefined }

Đây là những gì sẽ xảy ra khi chúng tôi áp dụng $and :

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $and: [ "$a", "$b" ] } }
         }
   ]
)

Kết quả:

{ "a" : 0, "b" : 2, "result" : false }
{ "a" : 10, "b" : 0, "result" : false }
{ "a" : 0, "b" : 0, "result" : false }
{ "a" : null, "b" : 2, "result" : false }
{ "a" : 10, "b" : null, "result" : false }
{ "a" : null, "b" : null, "result" : false }
{ "a" : undefined, "b" : 2, "result" : false }
{ "a" : 10, "b" : undefined, "result" : false }
{ "a" : undefined, "b" : undefined, "result" : false }

Ở đây, tôi chỉ đơn giản sử dụng trường làm biểu thức. Như mong đợi, tất cả đều trả về false .

Đây là giao diện khi chúng ta chỉ áp dụng một đối số:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 2, 3, 5, 8 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        result: { $and: [ "$a" ] } }
         }
   ]
)

Kết quả:

{ "a" : 0, "result" : false }
{ "a" : 10, "result" : true }
{ "a" : null, "result" : false }
{ "a" : undefined, "result" : false }

Nó trả về true khi giá trị là 10 nhưng false trong tất cả các trường hợp khác.

Gọi $and Không có Đối số

Khi được gọi mà không có đối số, $and toán tử đánh giá thành true .

Ví dụ:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1 ] } } },
     { $project: { 
        _id: 0,
        result: { $and: [ ] } }
         }
   ]
)

Kết quả:

{ "result" : true }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để Benchmark MongoDB với YCSB?

  2. nhóm theo truy vấn về bộ sưu tập sao băng

  3. Thiết kế lược đồ MongoDB:Luôn có một lược đồ

  4. Mongoose có cung cấp quyền truy cập vào giá trị trước đó của thuộc tính trong pre ('save') không?

  5. MongoDB - Lỗi:lệnh getMore không thành công:Không tìm thấy con trỏ