In MongoDB, de $gt
aggregatiepijplijnoperator vergelijkt twee waarden en retourneert ofwel true
of false
, afhankelijk van of de eerste waarde groter is dan de tweede waarde.
Voorbeeld
Stel dat we een verzameling hebben met de naam data
met de volgende documenten:
{ "_id" : 1, "a" : 250, "b" : 250 } { "_id" : 2, "a" : 300, "b" : 250 } { "_id" : 3, "a" : 250, "b" : 300 }
We kunnen de $gt
. gebruiken operator om de a
. te vergelijken en b
velden:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
isGreaterThan: { $gt: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 250, "b" : 250, "isGreaterThan" : false } { "a" : 300, "b" : 250, "isGreaterThan" : true } { "a" : 250, "b" : 300, "isGreaterThan" : false }
In het eerste document, de a
en b
velden zijn equivalent, wat resulteert in een retourwaarde van false
(omdat a
is niet groter dan b
).
Maar in het tweede document a
is groter dan b
, wat resulteert in een retourwaarde van true
.
In het derde document, a
is kleiner dan b
en daarom de $gt
operator retourneert false
.
Typen vergelijken
De $gt
operator vergelijkt zowel waarde als type met behulp van de gespecificeerde BSON-vergelijkingsvolgorde voor waarden van verschillende typen.
Stel dat onze collectie de volgende documenten bevat:
{ "_id" : 4, "a" : 250, "b" : "250" } { "_id" : 5, "a" : 250, "b" : NumberDecimal("250") } { "_id" : 6, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00") } { "_id" : 7, "a" : "2022-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z") }
We kunnen $gt
apply toepassen naar de a
en b
velden van die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 4, 5, 6, 7 ] } } },
{
$project:
{
a: 1,
b: 1,
isGreaterThan: { $gt: [ "$a", "$b" ] }
}
}
]
).pretty()
Resultaat:
{ "_id" : 4, "a" : 250, "b" : "250", "isGreaterThan" : false } { "_id" : 5, "a" : 250, "b" : NumberDecimal("250"), "isGreaterThan" : false } { "_id" : 6, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00"), "isGreaterThan" : false } { "_id" : 7, "a" : "2022-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z"), "isGreaterThan" : false }
In document 4, zowel a
en b
een waarde hebben van 250
, maar als je goed kijkt naar b
, het is een string (het is omgeven door dubbele aanhalingstekens). In dit geval $gt
retourneert false
. Als we de $lt
. hadden gebruikt operator zou dit true
hebben opgeleverd .
Document 5 gebruikt ook een waarde van 250, maar de ene is een dubbele en de andere een decimaal. Hoe dan ook, deze zijn equivalent, en dus $gt
retourneert false
.
Op dezelfde manier retourneert document 6 false
omdat beide waarden equivalent zijn, ook al gebruikt de ene expliciet decimalen en de andere niet.
Document 7 retourneert false
omdat, hoewel de datum/tijd-waarde in a
is groter dan die in b
, gebruiken ze verschillende typen om die datum uit te drukken (a
gebruikt een datum/tijd-tekenreeks en b
gebruikt een Date-object). Als we de $lt
. hadden gebruikt operator zou dit true
hebben opgeleverd vanwege de BSON-vergelijkingsvolgorde.
Null-waarden
$gt
vergelijkingen kunnen worden gemaakt met null
. En het vergelijken van null
naar null
retourneert true
.
Stel dat we de volgende documenten aan onze collectie toevoegen:
{ "_id" : 8, "a" : 250, "b" : null } { "_id" : 9, "a" : null, "b" : null }
Laten we $gt
toepassen naar die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 8, 9 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
isGreaterThan: { $gt: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 250, "b" : null, "isGreaterThan" : true } { "a" : null, "b" : null, "isGreaterThan" : false }
Ontbrekende velden
Als een van de velden die u probeert te vergelijken ontbreekt, $gt
retourneert true
als het tweede veld ontbreekt, en false
als de eerste ontbreekt.
Stel dat we de volgende documenten aan onze collectie toevoegen:
{ "_id" : 10, "a" : 250 } { "_id" : 11, "b" : 250 }
Laten we $gt
toepassen naar die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 10, 11 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
isGreaterThan: { $gt: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 250, "isGreaterThan" : true } { "b" : 250, "isGreaterThan" : false }
Oneindig
Infinity
vergelijken tot Infinity
retourneert false
.
-Infinity
vergelijken naar -Infinity
retourneert false
.
Infinity
vergelijken naar -Infinity
retourneert true
.
-Infinity
vergelijken tot Infinity
retourneert false
.
Stel dat we de volgende documenten aan onze collectie toevoegen:
{ "_id" : 12, "a" : Infinity, "b" : Infinity } { "_id" : 13, "a" : -Infinity, "b" : -Infinity } { "_id" : 14, "a" : Infinity, "b" : -Infinity } { "_id" : 15, "a" : -Infinity, "b" : Infinity }
Laten we $gt
toepassen naar die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 12, 13, 14, 15 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
isGreaterThan: { $gt: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : Infinity, "b" : Infinity, "isGreaterThan" : false } { "a" : -Infinity, "b" : -Infinity, "isGreaterThan" : false } { "a" : Infinity, "b" : -Infinity, "isGreaterThan" : true } { "a" : -Infinity, "b" : Infinity, "isGreaterThan" : false }