MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $toInt

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.