In MongoDB is de $cmp aggregatiepijplijnoperator vergelijkt twee waarden en retourneert ofwel -1 , 1 , of 0 , afhankelijk van of de eerste waarde kleiner dan, groter dan of gelijk is aan de eerste waarde.
In het bijzonder de $cmp operator geeft terug:
-1als de eerste waarde kleiner is dan de tweede.1als de eerste waarde groter is dan de tweede.0als de twee waarden equivalent zijn.
Voorbeeld
Stel dat we een verzameling hebben met de naam data met de volgende documenten:
{ "_id" : 1, "a" : 2, "b" : 2 }
{ "_id" : 2, "a" : 2, "b" : 3 }
{ "_id" : 3, "a" : 3, "b" : 2 }
We kunnen de $cmp . gebruiken operator om de a . te vergelijken en b velden:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: { $cmp: [ "$a", "$b" ] }
}
}
]
) Resultaat:
{ "a" : 2, "b" : 2, "result" : 0 }
{ "a" : 2, "b" : 3, "result" : -1 }
{ "a" : 3, "b" : 2, "result" : 1 } Verschillende soorten vergelijken
De $cmp operator vergelijkt zowel waarde als type, met behulp van de gespecificeerde BSON-vergelijkingsvolgorde voor waarden van verschillende typen.
Stel dat we de volgende documenten aan onze collectie toevoegen:
{ "_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 }
Dit is wat er gebeurt als we $cmp toepassen naar de nieuwe documenten:
db.data.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } },
{ $project: {
a: 1,
b: 1,
result: { $cmp: [ "$a", "$b" ] }
}
}
]
).pretty() Resultaat:
{
"_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 }