Di MongoDB, $anyElementTrue
operator pipa agregasi mengevaluasi array sebagai satu set dan mengembalikan true
jika salah satu elemennya true
.
Jika tidak ada elemen yang true
, lalu 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 $anyElementTrue
untuk mengetahui apakah array berisi elemen apa pun yang bernilai true
:
db.test.aggregate(
[
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
Hasil:
{ "anyElementTrue" : true }
Dalam hal ini, semua elemen array dievaluasi menjadi true
(yaitu tidak false
, null
, 0
, atau undefined
), dan jadi kami mendapatkan hasil dari true
.
Bila Tidak Ada Elemen yang Benar
Mari tambahkan dokumen berikut ke koleksi:
{ "_id" : 2, "data" : [ false, undefined, 0, null ] }
Dan mari kita jalankan $anyElementTrue
terhadap dokumen itu:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
Hasil:
{ "anyElementTrue" : false }
Seperti yang bisa kita lihat di sini, $anyElementTrue
dievaluasi menjadi false
setiap kali array berisi false
, null
, 0
, atau undefined
nilai.
Bila Array Berisi Benar dan Salah
Mari tambahkan dokumen berikut ke koleksi:
{ "_id" : 3, "data" : [ true, false ] }
Dan mari kita jalankan $anyElementTrue
terhadap dokumen itu:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
Hasil:
{ "anyElementTrue" : true }
Kami mendapatkan true
, meskipun ada elemen lain yang false
. Ini sudah diduga, karena $anyElementTrue
mengembalikan true
setiap kali ada setidaknya satu elemen yang true
, terlepas dari berapa banyak elemen lain yang salah.
Array Kosong
Array kosong mengembalikan true
.
Misalkan kita menambahkan dokumen berikut ke koleksi kita:
{ "_id" : 4, "data" : [ ] }
Dokumen ini berisi larik kosong.
Sekarang mari kita jalankan $anyElementTrue
lagi:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
Hasil:
{ "anyElementTrue" : false }
Ini mengembalikan false
, karena array kosong bukan false
.
Array Bersarang
$anyElementTrue
operator tidak turun ke array bersarang apa pun. Ini mengevaluasi array di tingkat atas.
Oleh karena itu, apakah array bersarang berisi elemen yang true
atau false
tidak relevan dengan $anyElementTrue
. Sejauh $anyElementTrue
bersangkutan, array bersarang adalah elemennya, dan karena itu true
.
Untuk mendemonstrasikan apa yang saya maksud, misalkan kita memasukkan dokumen berikut:
{ "_id" : 5, "data" : [ false, [ false ] ] } { "_id" : 6, "data" : [ false, false ] }
Sekarang mari kita jalankan $anyElementTrue
terhadap dua dokumen tersebut:
db.test.aggregate(
[
{ $match: {_id: { $in: [5,6] }} },
{ $project: {
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
Hasil:
{ "_id" : 5, "anyElementTrue" : true } { "_id" : 6, "anyElementTrue" : false }
Kita dapat melihat bahwa dokumen pertama mengembalikan true
dan yang kedua mengembalikan false
.
Ini karena, larik di dokumen pertama berisi larik bersarang, yang cukup untuk mengembalikan true
, terlepas dari isinya.
Dokumen kedua tidak berisi array bersarang – hanya berisi dua false
nilai – dan karena itu dievaluasi menjadi false
.