In MongoDB is de $lte
aggregatiepijplijnoperator vergelijkt twee waarden en retourneert ofwel true
of false
, afhankelijk van of de eerste waarde kleiner is dan of gelijk is aan 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 $lte
. 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,
result: { $lte: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 250, "b" : 250, "result" : true } { "a" : 300, "b" : 250, "result" : false } { "a" : 250, "b" : 300, "result" : true }
In het eerste document, de a
en b
velden zijn equivalent, wat resulteert in een retourwaarde van true
(omdat a
is inderdaad kleiner dan of gelijk aan b
).
In het tweede document a
is groter dan b
, wat resulteert in een retourwaarde van false
(omdat a
is niet kleiner dan of gelijk aan b
).
In het derde document, a
is kleiner dan b
en daarom de $lte
operator retourneert true
(omdat a
is kleiner dan of gelijk aan b
).
Typen vergelijken
De $lte
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" : 250 } { "_id" : 6, "a" : 250, "b" : NumberDecimal("250") } { "_id" : 7, "a" : NumberDecimal("250"), "b" : 250 } { "_id" : 8, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00") } { "_id" : 9, "a" : NumberDecimal("250.00"), "b" : NumberDecimal("250") } { "_id" : 10, "a" : "2022-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z") } { "_id" : 11, "a" : ISODate("2021-01-03T23:30:15.100Z"), "b" : "2021-01-03T23:30:15.100Z" }
Dit is wat er gebeurt als we $lte
toepassen naar de a
en b
velden van die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 4, 5, 6, 7, 8, 9, 10, 11 ] } } },
{
$project:
{
a: 1,
b: 1,
result: { $lte: [ "$a", "$b" ] }
}
}
]
).pretty()
Resultaat:
{ "_id" : 4, "a" : 250, "b" : "250", "result" : true } { "_id" : 5, "a" : "250", "b" : 250, "result" : false } { "_id" : 6, "a" : 250, "b" : NumberDecimal("250"), "result" : true } { "_id" : 7, "a" : NumberDecimal("250"), "b" : 250, "result" : true } { "_id" : 8, "a" : NumberDecimal("250"), "b" : NumberDecimal("250.00"), "result" : true } { "_id" : 9, "a" : NumberDecimal("250.00"), "b" : NumberDecimal("250"), "result" : true } { "_id" : 10, "a" : "2022-01-03T23:30:15.100Z", "b" : ISODate("2021-01-03T23:30:15.100Z"), "result" : true } { "_id" : 11, "a" : ISODate("2021-01-03T23:30:15.100Z"), "b" : "2021-01-03T23:30:15.100Z", "result" : false }
Null-waarden
$lte
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" : 12, "a" : 250, "b" : null } { "_id" : 13, "a" : null, "b" : 250 } { "_id" : 14, "a" : null, "b" : null }
Laten we $lte
toepassen naar die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 12, 13, 14 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
result: { $lte: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 250, "b" : null, "result" : false } { "a" : null, "b" : 250, "result" : true } { "a" : null, "b" : null, "result" : true }
Ontbrekende velden
Als een van de velden die u probeert te vergelijken ontbreekt, $lte
retourneert false
als het tweede veld ontbreekt, en true
als de eerste ontbreekt.
Stel dat we de volgende documenten aan onze collectie toevoegen:
{ "_id" : 15, "a" : 250 } { "_id" : 16, "b" : 250 }
Laten we $lte
toepassen naar die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 15, 16 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
result: { $lte: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 250, "result" : false } { "b" : 250, "result" : true }
Oneindig
Infinity
vergelijken tot Infinity
retourneert true
.
-Infinity
vergelijken naar -Infinity
retourneert true
.
Infinity
vergelijken naar -Infinity
retourneert false
.
-Infinity
vergelijken tot Infinity
retourneert true
.
Stel dat we de volgende documenten aan onze collectie toevoegen:
{ "_id" : 17, "a" : Infinity, "b" : Infinity } { "_id" : 18, "a" : -Infinity, "b" : -Infinity } { "_id" : 19, "a" : Infinity, "b" : -Infinity } { "_id" : 20, "a" : -Infinity, "b" : Infinity }
Laten we $lte
toepassen naar die documenten:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 17, 18, 19, 20 ] } } },
{
$project:
{
_id: 0,
a: 1,
b: 1,
result: { $lte: [ "$a", "$b" ] }
}
}
]
)
Resultaat:
{ "a" : Infinity, "b" : Infinity, "result" : true } { "a" : -Infinity, "b" : -Infinity, "result" : true } { "a" : Infinity, "b" : -Infinity, "result" : false } { "a" : -Infinity, "b" : Infinity, "result" : true }