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 .