Ab MongoDB 4.0 können Sie den $toInt
verwenden Aggregations-Pipeline-Operator zum Konvertieren eines Werts in eine Ganzzahl.
Die meisten Typen können in eine Ganzzahl konvertiert werden, die Werte ObjectId und Date jedoch nicht.
Wenn Sie einen booleschen Wert in eine Ganzzahl umwandeln, wenn der boolesche Wert true
ist , dann ist die Ganzzahl 1
. Wenn der boolesche Wert false
ist , dann ist die Ganzzahl 0
.
Numerische Werte wie Double und Dezimal werden bei Bedarf abgeschnitten.
Beispiel
Angenommen, wir haben eine Sammlung namens types
und es enthält die folgenden Dokumente:
{ "_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") }
Wir können den $toInt
verwenden -Operator zum Konvertieren dieser Felder (mit Ausnahme der _id
und date
Felder) in eine ganze Zahl. Wenn die Eingabe bereits eine Ganzzahl ist, wird einfach die Ganzzahl zurückgegeben.
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()
Ergebnis:
{ "double" : 123, "string" : 123, "boolean" : 1, "integer" : 123, "long" : 123, "decimal" : 123 }
Beachten Sie, dass ich das date
ausgeschlossen habe und _id
Felder aus der Operation, da diese Typen nicht in Ganzzahlen konvertiert werden können.
Fehler
Wenn Sie auf Fehler stoßen, versuchen Sie es mit $convert
Operator anstelle von $toInt
. Der $convert
Mit dem Operator können Sie Fehler behandeln, ohne den gesamten Aggregationsvorgang zu beeinträchtigen.
Der $toInt
-Operator entspricht der Verwendung von $convert
Operator, um einen Wert in eine Ganzzahl umzuwandeln.
Hier ist ein Beispiel für die Verwendung von $convert
um zu versuchen, ein Datum in eine ganze Zahl umzuwandeln (was zu einem Fehler führt):
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$date",
to: "int",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Ergebnis:
{ "result" : "An error occurred" }
Verwenden von $convert
ermöglichte es uns, die zu verwendende Fehlermeldung anzugeben, wenn der Fehler auftrat, und es hielt nicht den gesamten Aggregationsvorgang an.
Siehe MongoDB $convert
für weitere Beispiele.