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

Operatore di pipeline di aggregazione di tipo $ MongoDB

In MongoDB, il $type l'operatore della pipeline di aggregazione restituisce il tipo BSON del relativo argomento.

Puoi usarlo per scoprire il tipo di un determinato campo.

Esempio

Supponiamo di avere una collezione chiamata cats con il seguente documento:

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

Possiamo utilizzare il seguente codice per restituire i tipi di quei campi:

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

Risultato:

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

Esempio 2

Ecco un altro esempio che contiene vari campi di diversi tipi BSON.

Abbiamo una raccolta chiamata types con il seguente 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
	]
}

Ai fini di questo articolo, ho nominato ogni campo in modo che rifletta il suo tipo BSON.

Ora possiamo utilizzare il codice seguente per restituire i tipi di quei campi:

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

Risultato:

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

Filtraggio per tipo

C'è anche un $type operatore di query dell'elemento che consente di filtrare una raccolta di documenti in base al tipo BSON.

Cerca i numeri

Se vuoi solo verificare se un valore è un numero, consulta MongoDB $isNumber .