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 }