sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $toInt

Från MongoDB 4.0 kan du använda $toInt aggregeringspipeline-operator för att konvertera ett värde till ett heltal.

De flesta typer kan konverteras till ett heltal, men det kan inte värdena ObjectId och Date.

När du konverterar en boolean till ett heltal, om boolean är true , då är heltal 1 . Om boolean är false , då är heltal 0 .

Numeriska värden som dubbel och decimal trunkeras efter behov.

Exempel

Anta att vi har en samling som heter types och den innehåller följande dokument:

{
	"_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 använda $toInt operatorn för att konvertera dessa fält (förutom _id och date fält) till ett heltal. Om inmatningen redan är ett heltal, returnerar den helt enkelt 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
}

Observera att jag exkluderade date och _id fält från operationen, eftersom dessa typer inte kan konverteras till ett heltal.

Fel

Om du stöter på fel, försök använda $convert operator istället för $toInt . $convert operatorn låter dig hantera fel utan att påverka hela aggregeringsoperationen.

$toInt operatorn är motsvarigheten till att använda $convert operator för att konvertera ett värde till ett heltal.

Här är ett exempel på hur du använder $convert för att försöka konvertera ett datum till ett heltal (vilket resulterar i ett fel):

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" } 

Använder $convert tillät oss att ange vilket felmeddelande som skulle användas när felet inträffade, och det stoppade inte hela aggregeringsoperationen.

Se MongoDB $convert för fler exempel.


  1. Mongoose - orsakad av ::11000 E11000 duplicate key error index?

  2. Laravel Caching med Redis är väldigt långsam

  3. MongoDB GPG - Ogiltiga signaturer

  4. Skapa ett textindex med olika fältvikter i MongoDB