In MongoDB ist der $cmp Der Aggregations-Pipeline-Operator vergleicht zwei Werte und gibt entweder -1 zurück , 1 , oder 0 , abhängig davon, ob der erste Wert kleiner, größer oder gleich dem ersten Wert ist.
Insbesondere der $cmp Operator gibt zurück:
-1wenn der erste Wert kleiner als der zweite ist.1wenn der erste Wert größer als der zweite ist.0wenn die beiden Werte äquivalent sind.
Beispiel
Angenommen, wir haben eine Sammlung namens data mit folgenden Dokumenten:
{ "_id" : 1, "a" : 2, "b" : 2 }
{ "_id" : 2, "a" : 2, "b" : 3 }
{ "_id" : 3, "a" : 3, "b" : 2 }
Wir können den $cmp verwenden Operator zum Vergleichen des a und b Felder:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $cmp: [ "$a", "$b" ] }
}
}
]
) Ergebnis:
{ "a" : 2, "b" : 2, "result" : 0 }
{ "a" : 2, "b" : 3, "result" : -1 }
{ "a" : 3, "b" : 2, "result" : 1 } Vergleich verschiedener Typen
Der $cmp -Operator vergleicht sowohl den Wert als auch den Typ unter Verwendung der angegebenen BSON-Vergleichsreihenfolge für Werte unterschiedlicher Typen.
Angenommen, wir fügen unserer Sammlung die folgenden Dokumente hinzu:
{ "_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 }
Folgendes passiert, wenn wir $cmp anwenden zu den neuen Dokumenten:
db.data.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } },
{ $project: {
a: 1,
b: 1,
result: { $cmp: [ "$a", "$b" ] }
}
}
]
).pretty() Ergebnis:
{
"_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 }