Di MongoDB, $in
operator kueri memilih dokumen di mana nilai bidang sama dengan nilai apa pun dalam larik yang ditentukan.
$in
operator kueri jangan bingung dengan $in
operator pipa agregasi, yang mengembalikan boolean yang menunjukkan apakah nilai tertentu ada dalam larik.
Contoh
Misalkan kita memiliki koleksi yang disebut products
dengan dokumen sebagai berikut:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 4, "prod" : "Shirt", "sizes" : "M" } { "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Kita dapat menggunakan $in
operator untuk memilih hanya dokumen-dokumen dengan _id
tertentu nilai.
Contoh kode:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
})
Hasil:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Dalam hal ini, kami hanya menginginkan dokumen yang berisi _id
nilai 1
, 2
, atau 3
.
Contoh 2
Ini contoh lain. Kali ini kita menggunakan $in
melawan bidang yang berbeda.
db.products.find({
sizes: { $in: [ "L" ] }
})
Hasil:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Dalam contoh ini kami menerapkan $in
ke sizes
bidang.
Dalam hal ini, dokumen pertama memiliki nilai sebagai string, sedangkan dua dokumen lainnya memilikinya sebagai elemen array. Bagaimanapun, semua dokumen yang cocok dikembalikan.
Perbandingan berbagai jenis dievaluasi menurut urutan perbandingan BSON.
Contoh Agregasi
Kita dapat menggunakan sintaks yang sama saat menggunakan $match
operator pipa agregasi.
Contoh kode:
db.products.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } }
]
)
Hasil:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Dan ini dia lagi saat menanyakan sizes
bidang:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
)
Hasil:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Ekspresi Reguler
Anda dapat menggunakan ekspresi reguler dalam kueri dengan menggunakan formulir /pattern/
.
Contoh:
db.products.find({
sizes: { $in: [ /^X/ ] }
})
Hasil:
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Dalam contoh ini, saya mengembalikan semua dokumen yang memiliki sizes
bidang dengan nilai berupa string yang dimulai dengan X
atau larik di mana setidaknya salah satu elemen dimulai dengan X
.