Fra MongoDB 4.0 kan du bruge $toInt
aggregeringspipeline-operator for at konvertere en værdi til et heltal.
De fleste typer kan konverteres til et heltal, men det kan værdierne ObjectId og Date ikke.
Når du konverterer en boolean til et heltal, hvis boolean er true
, så er heltal 1
. Hvis boolean er false
, så er hele tallet 0
.
Numeriske værdier såsom dobbelt og decimal afkortes efter behov.
Eksempel
Antag, at vi har en samling kaldet types
og den indeholder følgende dokumenter:
{ "_id" : ObjectId("601340eac8eb4369cf6ad9db"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75") }
Vi kan bruge $toInt
operator til at konvertere disse felter (undtagen _id
og date
felter) til et heltal. Hvis input allerede er et heltal, returnerer det simpelthen heltal.
db.types.aggregate(
[
{
$project:
{
_id: 0,
double: { $toInt: "$double" },
string: { $toInt: "$string" },
boolean: { $toInt: "$boolean" },
integer: { $toInt: "$integer" },
long: { $toInt: "$long" },
decimal: { $toInt: "$decimal" }
}
}
]
).pretty()
Resultat:
{ "double" : 123, "string" : 123, "boolean" : 1, "integer" : 123, "long" : 123, "decimal" : 123 }
Bemærk, at jeg har ekskluderet date
og _id
felter fra operationen, fordi disse typer ikke kan konverteres til et heltal.
Fejl
Hvis du støder på fejl, så prøv at bruge $convert
operator i stedet for $toInt
. $convert
operator giver dig mulighed for at håndtere fejl uden at påvirke hele aggregeringsoperationen.
$toInt
operator svarer til at bruge $convert
operator for at konvertere en værdi til et heltal.
Her er et eksempel på brug af $convert
for at prøve at konvertere en dato til et heltal (hvilket resulterer i en fejl):
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$date",
to: "int",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Resultat:
{ "result" : "An error occurred" }
Brug af $convert
gav os mulighed for at angive den fejlmeddelelse, der skulle bruges, når fejlen opstod, og det stoppede ikke hele aggregeringsoperationen.
Se MongoDB $convert
for flere eksempler.