sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $toLargo

Desde MongoDB 4.0, puede usar $toLong operador de canalización de agregación para convertir un valor en largo.

La mayoría de los tipos se pueden convertir en largos, pero el ObjectId no.

Cuando convierte un valor de Fecha en largo, $toLong devuelve el número de milisegundos desde la época que corresponde al valor de la fecha.

Cuando convierte un valor booleano en largo, si el valor booleano es true , entonces el largo es 1 . Si el booleano es false , entonces el largo es 0 .

Ejemplo

Supongamos que tenemos una colección llamada types y contiene los siguientes documentos:

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

Podemos usar el $toLong operador para convertir esos campos (excepto el _id campo) a un largo. Si la entrada ya es larga, simplemente devuelve la longitud.

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

Resultado:

{
	"double" : NumberLong(123),
	"string" : NumberLong(123),
	"boolean" : NumberLong(1),
	"date" : NumberLong("1609457415123"),
	"integer" : NumberLong(123),
	"long" : NumberLong(123),
	"decimal" : NumberLong(123)
}

Errores

Si encuentra errores, intente usar $convert operador en lugar de $toLong . El $convert operador le permite manejar errores sin afectar toda la operación de agregación.

El $toLong operador es el equivalente de usar el $convert operador para convertir un valor en largo.

Aquí hay un ejemplo del uso de $convert para intentar convertir un ObjectId en un largo (lo que da como resultado un error):

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

Resultado:

{ "result" : "An error occurred" } 

Usando $convert nos permitió especificar el mensaje de error que se usaría cuando ocurriera el error y no detuvo toda la operación de agregación.

Ver MongoDB $convert para más ejemplos.