MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $toDecimal

От MongoDB 4.0 можете да използвате $toDecimal оператор на конвейер за агрегиране за преобразуване на стойност в десетична.

Повечето типове могат да бъдат преобразувани в десетични, но ObjectId не може.

Когато преобразувате стойност за дата в десетична, $toDecimal връща броя милисекунди от епохата, който съответства на стойността на датата.

Когато преобразувате булева в десетична, ако булевата е true , тогава десетичната запетая е 1 . Ако логичното е false , тогава десетичната запетая е 0 .

Пример

Да предположим, че имаме колекция, наречена types и съдържа следните документи:

{
	"_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")
}

Можем да използваме $toDecimal оператор за преобразуване на тези типове (с изключение на ObjectId) в десетичен знак. Ако входът вече е десетичен, тогава той просто връща десетичния знак.

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()

Резултат:

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

Грешки

Ако срещнете грешки, опитайте да използвате $convert оператор вместо $toDecimal . $convert операторът ви позволява да обработвате грешки, без да засягате цялата операция на агрегиране.

$toDecimal операторът е еквивалент на използването на $convert оператор за преобразуване на стойност в десетична.

Ето пример за използване на $convert за да опитате да конвертирате ObjectId в десетичен знак (което води до грешка):

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "decimal",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

Резултат:

{ "result" : "An error occurred" } 

Използване на $convert ни позволи да посочим съобщението за грешка, което да използваме при възникване на грешката, и то не спря цялата операция на агрегиране.

Вижте MongoDB $convert за още примери.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Архивиране и възстановяване на MongoDB с помощта на MongoDump

  2. Проста страница за вход в nodejs, използвайки експрес и паспорт с mongodb

  3. свързване към локален mongodb от докер контейнер

  4. Meteor връща грешка в невалиден шестнадесетичен низ, опитвайки се да създаде ObjectID?

  5. Каква е разликата между replaceOne() и updateOne() в MongoDB?