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

MongoDB $ allElementsTrue

Trong MongoDB, $allElementsTrue toán tử đường ống tổng hợp đánh giá một mảng là một tập hợp và trả về true nếu không có phần tử nào trong mảng là false .

Nếu mảng chứa một phần tử false , rồi đến $allElementsTrue trả về false .

Phần tử của mảng là true nếu nó không phải là false , null , 0 hoặc undefined .

Ví dụ

Giả sử chúng ta có một bộ sưu tập với tài liệu sau:

{ "_id" : 1, "data" : [ 1, 2, 3 ] }

Tài liệu này chứa một mảng.

Chúng ta có thể chạy truy vấn sau với $allElementsTrue để tìm hiểu xem mảng có chứa phần tử false hay không :

db.test.aggregate(
   [
     { $project: { 
        _id: 0,
        allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
         }
   ]
)

Kết quả:

{ "allElementsTrue" : true }

Trong trường hợp này, không có phần tử nào của mảng là false và do đó chúng tôi nhận được kết quả là true .

Khi mảng chứa sai

Hãy thêm tài liệu sau vào bộ sưu tập:

{ "_id" : 2, "data" : [ true, false ] }

Và hãy chạy $allElementsTrue chống lại tài liệu đó:

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
      _id: 0,
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Kết quả:

{ "allElementsTrue" : false }

Lần này chúng tôi nhận được false , mặc dù có một phần tử khác là true . Điều này được mong đợi, bởi vì $allElementsTrue trả về false bất cứ khi nào có ít nhất một phần tử false , bất kể có bao nhiêu phần tử khác đúng.

Mảng trống

Mảng trống trả về true .

Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập của mình:

{ "_id" : 3, "data" : [ ] }

Tài liệu này chứa một mảng trống.

Bây giờ chúng ta hãy chạy $allElementsTrue một lần nữa:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
      _id: 0,
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Kết quả:

{ "allElementsTrue" : true }

Như mong đợi, nó trả về true .

Giá trị rỗng, 0 và không xác định

Không hoàn toàn đúng rằng $allElementsTrue đánh giá thành false chỉ khi mảng chứa false .

$allElementsTrue toán tử cũng đánh giá là false bất cứ khi nào một mảng chứa null , 0 hoặc undefined giá trị.

Giả sử chúng tôi thêm các tài liệu sau vào bộ sưu tập của mình:

{ "_id" : 4, "data" : [ 1, null, 3 ] }
{ "_id" : 5, "data" : [ 1, undefined, 3 ] }
{ "_id" : 6, "data" : [ 0, 1, 2 ] }

Mảng của mỗi tài liệu chứa một phần tử null , 0 hoặc undefined .

Bây giờ chúng ta hãy chạy $allElementsTrue chống lại các tài liệu đó:

db.test.aggregate(
  [
    { $match: {_id: { $in: [4,5,6] }} },
    { $project: { 
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Kết quả:

{ "_id" : 4, "allElementsTrue" : false }
{ "_id" : 5, "allElementsTrue" : false }
{ "_id" : 6, "allElementsTrue" : false }

Tất cả các tài liệu đều trả về false như mong đợi.

Mảng lồng nhau

Nếu mảng chứa một mảng lồng nhau có chứa phần tử false , thì điều đó là không đủ đối với $allElementsTrue để trả về false . Theo như $allElementsTrue có liên quan, mảng lồng nhau là phần tử và do đó không phải là false .

Để chứng minh ý tôi, giả sử chúng ta chèn các tài liệu sau:

{ "_id" : 7, "data" : [ 1, [ false ], 3 ] }
{ "_id" : 8, "data" : [ 1, [ false ], false ] }

Bây giờ chúng ta hãy chạy $allElementsTrue chống lại hai tài liệu đó:

db.test.aggregate(
  [
    { $match: {_id: { $in: [7,8] }} },
    { $project: { 
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Kết quả:

{ "_id" : 7, "allElementsTrue" : true }
{ "_id" : 8, "allElementsTrue" : false }

Chúng ta có thể thấy rằng tài liệu đầu tiên trả về true và thứ hai trả về false .

Điều này là do, trong tài liệu đầu tiên, false giá trị được lồng bên trong một mảng khác và do đó không được tính là false giá trị (tức là chính mảng là giá trị).

Tuy nhiên, tài liệu thứ hai cũng chứa false như một trong các phần tử của mảng và do đó, giá trị đó là nguyên nhân gây ra $allElementsTrue để đánh giá thành false .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để định cấu hình AppArmor cho Bộ bản sao MongoDB?

  2. Tự động hóa triển khai cơ sở dữ liệu MongoDB

  3. Làm thế nào để sửa chữa mongodb của tôi?

  4. Cập nhật nhiều trường trong tài liệu MongoDB

  5. Làm cách nào để sử dụng Map / Reduce trong MongoDB?