Di MongoDB, $cmp operator pipa agregasi membandingkan dua nilai dan mengembalikan -1 , 1 , atau 0 , tergantung pada apakah nilai pertama lebih kecil dari, lebih besar dari, atau sama dengan nilai pertama.
Secara khusus, $cmp operator kembali:
-1jika nilai pertama lebih kecil dari yang kedua.1jika nilai pertama lebih besar dari yang kedua.0jika kedua nilai tersebut setara.
Contoh
Misalkan kita memiliki koleksi yang disebut data dengan dokumen sebagai berikut:
{ "_id" : 1, "a" : 2, "b" : 2 }
{ "_id" : 2, "a" : 2, "b" : 3 }
{ "_id" : 3, "a" : 3, "b" : 2 }
Kita dapat menggunakan $cmp operator untuk membandingkan a dan b bidang:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $cmp: [ "$a", "$b" ] }
}
}
]
) Hasil:
{ "a" : 2, "b" : 2, "result" : 0 }
{ "a" : 2, "b" : 3, "result" : -1 }
{ "a" : 3, "b" : 2, "result" : 1 } Membandingkan Berbagai Jenis
$cmp operator membandingkan nilai dan jenis, menggunakan urutan perbandingan BSON yang ditentukan untuk nilai dari jenis yang berbeda.
Misalkan kita menambahkan dokumen berikut ke koleksi kita:
{ "_id" : 4, "a" : ISODate("2021-01-03T23:30:15.100Z"), "b" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 5, "a" : 2, "b" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 6, "a" : ISODate("2019-12-08T04:00:20.112Z"), "b" : 2 }
{ "_id" : 7, "a" : null, "b" : 2 }
{ "_id" : 8, "a" : 2, "b" : null }
{ "_id" : 9, "a" : null, "b" : null }
{ "_id" : 10, "a" : Infinity, "b" : 3 }
{ "_id" : 11, "a" : 2, "b" : Infinity }
{ "_id" : 12, "a" : Infinity, "b" : Infinity }
Inilah yang terjadi ketika kita menerapkan $cmp ke dokumen baru:
db.data.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } },
{ $project: {
a: 1,
b: 1,
result: { $cmp: [ "$a", "$b" ] }
}
}
]
).pretty() Hasil:
{
"_id" : 4,
"a" : ISODate("2021-01-03T23:30:15.100Z"),
"b" : ISODate("2019-12-08T04:00:20.112Z"),
"result" : 1
}
{
"_id" : 5,
"a" : 2,
"b" : ISODate("2019-12-08T04:00:20.112Z"),
"result" : -1
}
{
"_id" : 6,
"a" : ISODate("2019-12-08T04:00:20.112Z"),
"b" : 2,
"result" : 1
}
{ "_id" : 7, "a" : null, "b" : 2, "result" : -1 }
{ "_id" : 8, "a" : 2, "b" : null, "result" : 1 }
{ "_id" : 9, "a" : null, "b" : null, "result" : 0 }
{ "_id" : 10, "a" : Infinity, "b" : 3, "result" : 1 }
{ "_id" : 11, "a" : 2, "b" : Infinity, "result" : -1 }
{ "_id" : 12, "a" : Infinity, "b" : Infinity, "result" : 0 }