MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $allElementsTrue

Di MongoDB, $allElementsTrue operator pipa agregasi mengevaluasi array sebagai satu set dan mengembalikan true jika tidak ada elemen dalam array yang false .

Jika array berisi elemen yang false , lalu $allElementsTrue mengembalikan false .

Elemen array adalah true jika tidak false , null , 0 , atau undefined .

Contoh

Misalkan kita memiliki koleksi dengan dokumen berikut:

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

Dokumen ini berisi larik.

Kita dapat menjalankan kueri berikut dengan $allElementsTrue untuk mengetahui apakah array mengandung elemen yang false :

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

Hasil:

{ "allElementsTrue" : true }

Dalam hal ini, tidak ada elemen array yang false , dan jadi kami mendapatkan hasil dari true .

Bila Array Berisi Salah

Mari tambahkan dokumen berikut ke koleksi:

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

Dan mari kita jalankan $allElementsTrue terhadap dokumen itu:

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

Hasil:

{ "allElementsTrue" : false }

Kali ini kita mendapatkan false , meskipun ada elemen lain yang true . Ini sudah diduga, karena $allElementsTrue mengembalikan false setiap kali ada setidaknya satu elemen yang false , terlepas dari berapa banyak elemen lain yang benar.

Array Kosong

Array kosong mengembalikan true .

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Dokumen ini berisi larik kosong.

Sekarang mari kita jalankan $allElementsTrue lagi:

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

Hasil:

{ "allElementsTrue" : true }

Seperti yang diharapkan, ia mengembalikan true .

Nilai Null, 0, dan Undefined

Tidak sepenuhnya benar bahwa $allElementsTrue dievaluasi menjadi false hanya ketika array berisi false .

$allElementsTrue operator juga mengevaluasi ke false setiap kali array berisi null , 0 , atau undefined nilai.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Setiap larik dokumen berisi elemen null , 0 , atau undefined .

Sekarang mari kita jalankan $allElementsTrue terhadap dokumen-dokumen itu:

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

Hasil:

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

Semua dokumen mengembalikan false seperti yang diharapkan.

Array Bersarang

Jika larik berisi larik bersarang yang berisi elemen yang false , maka itu tidak cukup untuk $allElementsTrue untuk mengembalikan false . Sejauh $allElementsTrue yang bersangkutan, array bersarang adalah elemennya, dan oleh karena itu bukan false .

Untuk mendemonstrasikan apa yang saya maksud, misalkan kita memasukkan dokumen berikut:

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

Sekarang mari kita jalankan $allElementsTrue terhadap dua dokumen tersebut:

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

Hasil:

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

Kita dapat melihat bahwa dokumen pertama mengembalikan true dan yang kedua mengembalikan false .

Ini karena, pada dokumen pertama, kode false nilai bersarang di dalam larik lain, dan karena itu tidak dihitung sebagai false nilai (yaitu array itu sendiri adalah nilai).

Namun dokumen kedua, juga berisi false sebagai salah satu elemen array, dan oleh karena itu, nilai itulah yang menyebabkan $allElementsTrue untuk mengevaluasi ke false .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menggunakan Elasticsearch dengan MongoDB?

  2. mongoexport E QUERY SyntaxError:Pengidentifikasi tak terduga

  3. Mengapa saya tidak bisa men-debug kode dalam metode async?

  4. Panduan untuk Query di Spring Data MongoDB

  5. cara memposting objek json sewenang-wenang ke webapi