Di MongoDB, $eq
operator pipeline agregasi membandingkan dua nilai dan mengembalikan true
atau false
, tergantung pada apakah kedua nilai tersebut setara atau tidak.
Contoh
Misalkan kita memiliki koleksi yang disebut data
dengan dokumen sebagai berikut:
{ "_id" : 1, "a" : 250, "b" : 250 } { "_id" : 2, "a" : 250, "b" : 100 }
Kita dapat menggunakan $eq
operator untuk membandingkan a
dan b
bidang:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 1, 2 ] } } },
{
$project:
{
a: 1,
b: 1,
isEquivalent: { $eq: [ "$a", "$b" ] }
}
}
]
)
Hasil:
{ "_id" : 1, "a" : 250, "b" : 250, "isEquivalent" : true } { "_id" : 2, "a" : 250, "b" : 100, "isEquivalent" : false }
Pada dokumen pertama, a
dan b
bidang setara, yang menghasilkan nilai kembalian true
. Tetapi di dokumen kedua mereka tidak setara, yang menghasilkan nilai kembalian false
.
Membandingkan Jenis
$eq
operator membandingkan nilai dan tipe menggunakan urutan perbandingan BSON yang ditentukan untuk nilai dari tipe yang berbeda.
Misalkan koleksi kami berisi dokumen-dokumen berikut:
{ "_id" : 3, "a" : 250, "b" : "250" } { "_id" : 4, "a" : 250, "b" : NumberDecimal("250") } { "_id" : 5, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00") } { "_id" : 6, "a" : "2021-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z") }
Kami dapat menerapkan $eq
ke a
dan b
bidang dokumen tersebut:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 3, 4, 5, 6 ] } } },
{
$project:
{
a: 1,
b: 1,
isEquivalent: { $eq: [ "$a", "$b" ] }
}
}
]
).pretty()
Hasil:
{ "_id" : 3, "a" : 250, "b" : "250", "isEquivalent" : false } { "_id" : 4, "a" : 250, "b" : NumberDecimal("250"), "isEquivalent" : true } { "_id" : 5, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00"), "isEquivalent" : true } { "_id" : 6, "a" : "2021-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z"), "isEquivalent" : false }
Dalam dokumen 3, keduanya a
dan b
memiliki nilai 250
, tetapi jika Anda melihat lebih dekat pada b
, ini adalah string (dikelilingi oleh tanda kutip ganda). Oleh karena itu, dokumen pertama mengembalikan false
.
Dokumen 4 mengembalikan true
karena kedua kolom berisi 250
dan keduanya adalah angka. Ini benar meskipun a
adalah ganda dan b
adalah desimal.
Dokumen 5 mengembalikan true
karena keduanya desimal dan keduanya bernilai sama (walaupun yang satu secara eksplisit menggunakan tempat desimal dan yang lainnya tidak).
Dokumen 6 mengembalikan false
karena, meskipun nilai tanggal/waktu sama persis, mereka menggunakan tipe yang berbeda untuk menyatakan tanggal tersebut (a
menggunakan string tanggal/waktu dan b
menggunakan objek Tanggal).
Nilai Null
Membandingkan nilai dengan null
mengembalikan false
, kecuali keduanya null
.
Misalkan kita menambahkan dokumen berikut ke koleksi kita:
{ "_id" : 7, "a" : 250, "b" : null } { "_id" : 8, "a" : null, "b" : null }
Ayo terapkan $eq
ke dokumen-dokumen itu:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 7, 8 ] } } },
{
$project:
{
a: 1,
b: 1,
isEquivalent: { $eq: [ "$a", "$b" ] }
}
}
]
)
Hasil:
{ "_id" : 7, "a" : 250, "b" : null, "isEquivalent" : false } { "_id" : 8, "a" : null, "b" : null, "isEquivalent" : true }
Bidang Tidak Ada
Jika salah satu bidang yang Anda coba bandingkan tidak ada, $eq
mengembalikan false
.
Misalkan kita menambahkan dokumen berikut ke koleksi kita:
{ "_id" : 9, "a" : 250 }
Ayo terapkan $eq
ke dokumen itu:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 9 ] } } },
{
$project:
{
a: 1,
b: 1,
isEquivalent: { $eq: [ "$a", "$b" ] }
}
}
]
)
Hasil:
{ "_id" : 9, "a" : 250, "isEquivalent" : false }
Tak Terbatas
Membandingkan Infinity
ke Infinity
mengembalikan true
.
Membandingkan -Infinity
ke -Infinity
mengembalikan true
.
Membandingkan Infinity
ke -Infinity
mengembalikan false
.
Misalkan kita menambahkan dokumen berikut ke koleksi kita:
{ "_id" : 10, "a" : Infinity, "b" : Infinity } { "_id" : 11, "a" : -Infinity, "b" : -Infinity } { "_id" : 12, "a" : Infinity, "b" : -Infinity }
Ayo terapkan $eq
ke dokumen-dokumen itu:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 10, 11, 12 ] } } },
{
$project:
{
a: 1,
b: 1,
isEquivalent: { $eq: [ "$a", "$b" ] }
}
}
]
)
Hasil:
{ "_id" : 10, "a" : Infinity, "b" : Infinity, "isEquivalent" : true } { "_id" : 11, "a" : -Infinity, "b" : -Infinity, "isEquivalent" : true } { "_id" : 12, "a" : Infinity, "b" : -Infinity, "isEquivalent" : false }