sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $toDecimal

Fra MongoDB 4.0 kan du bruge $toDecimal aggregeringspipeline-operatør for at konvertere en værdi til en decimal.

De fleste typer kan konverteres til decimaler, men ObjectId kan ikke.

Når du konverterer en Dato-værdi til en decimal, $toDecimal returnerer antallet af millisekunder siden epoken, der svarer til datoværdien.

Når du konverterer en boolean til en decimal, hvis boolean er true , så er decimaltallet 1 . Hvis boolean er false , så er decimalen 0 .

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 $toDecimal operatør for at konvertere disse typer (undtagen ObjectId) til en decimal. Hvis input allerede er en decimal, returnerer den blot decimalen.

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          double: { $toDecimal: "$double" },
          string: { $toDecimal: "$string" },
          boolean: { $toDecimal: "$boolean" },
          date: { $toDecimal: "$date" },
          integer: { $toDecimal: "$integer" },
          long: { $toDecimal: "$long" },
          decimal: { $toDecimal: "$decimal" }
        }
    }
  ]
).pretty()

Resultat:

{
	"double" : NumberDecimal("123.750000000000"),
	"string" : NumberDecimal("123"),
	"boolean" : NumberDecimal("1"),
	"date" : NumberDecimal("1609457415123"),
	"integer" : NumberDecimal("123.000000000000"),
	"long" : NumberDecimal("123"),
	"decimal" : NumberDecimal("123.75")
}

Fejl

Hvis du støder på fejl, så prøv at bruge $convert operator i stedet for $toDecimal . $convert operator giver dig mulighed for at håndtere fejl uden at påvirke hele aggregeringsoperationen.

$toDecimal operator svarer til at bruge $convert operator for at konvertere en værdi til en decimal.

Her er et eksempel på brug af $convert at forsøge at konvertere et ObjectId til en decimal (hvilket resulterer i en fejl):

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "decimal",
              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.


  1. MongoDB $dayOfWeek

  2. Første MongoDB Hosting DBaaS til at understøtte Azure Government for Public Sector

  3. Redis, hvordan øger man alle scores af et zset med ZINCRBY?

  4. sæt feltet som tomt for mongo-objekt ved hjælp af mongoose