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

Operador de canalización de agregación de tipo $ de MongoDB

En MongoDB, el $type El operador de canalización de agregación devuelve el tipo BSON de su argumento.

Puede usarlo para averiguar el tipo de un campo dado.

Ejemplo

Supongamos que tenemos una colección llamada cats con el siguiente documento:

{
	"_id" : ObjectId("60173c09c8eb4369cf6ad9e0"),
	"name" : "Scratch",
	"born" : ISODate("2021-01-03T23:30:15.123Z"),
	"weight" : 30
}

Podemos usar el siguiente código para devolver los tipos de esos campos:

db.cats.aggregate(
  [
    {
      $project:
        { 
          _id: { $type: "$_id" },
          name: { $type: "$name" },
          born: { $type: "$born" },
          weight: { $type: "$weight" }
        }
    }
  ]
).pretty()

Resultado:

{
	"_id" : "objectId",
	"name" : "string",
	"born" : "date",
	"weight" : "double"
}

Ejemplo 2

Aquí hay otro ejemplo que contiene varios campos de diferentes tipos de BSON.

Tenemos una colección llamada types con el siguiente documento:

{
	"_id" : ObjectId("601738d7c8eb4369cf6ad9de"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75"),
	"object" : {
		"a" : 1
	},
	"array" : [
		1,
		2,
		3
	]
}

A los efectos de este artículo, he nombrado cada campo para reflejar su tipo BSON.

Ahora podemos usar el siguiente código para devolver los tipos de esos campos:

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

Resultado:

{
	"_id" : "objectId",
	"double" : "double",
	"string" : "string",
	"boolean" : "bool",
	"date" : "date",
	"integer" : "int",
	"long" : "long",
	"decimal" : "decimal",
	"object" : "object",
	"array" : "array"
}

Filtrado por tipo

También hay un $type operador de consulta de elemento que le permite filtrar una colección de documentos según el tipo BSON.

Buscar números

Si solo desea verificar si un valor es un número, consulte MongoDB $isNumber .