No MongoDB, você pode usar o
$type
operador de consulta de elemento para filtrar uma coleção de documentos com base no tipo BSON. Ele retorna apenas os documentos que possuem um tipo BSON específico em um campo específico. Você fornece o campo e o tipo BSON e
$type
retornará todos os documentos correspondentes. Exemplo
Suponha que inserimos os seguintes documentos em uma coleção chamada
employees
:db.employees.insertMany([
{ _id: 1, name: "Sandy", remuneration: "Too Much!!!" },
{ _id: 2, name: "Sarah", remuneration: NumberInt(128000) },
{ _id: 3, name: "Fritz", remuneration: 25000 },
{ _id: 4, name: "Chris", remuneration: NumberDecimal("45000.75") },
{ _id: 5, name: "Beck", remuneration: "10% commission" },
{ _id: 6, name: "Peter", remuneration: "70K" },
{ _id: 7, name: "Homer", remuneration: null },
])
Cada documento contém um funcionário junto com a remuneração desse funcionário.
No entanto, embora cada documento tenha uma
remuneration
campo, podemos ver que não há consistência entre os documentos em relação ao tipo BSON que está sendo usado neste campo. Podemos usar o
$type
operador de consulta para retornar apenas os documentos para os quais a remuneration
campo é de um determinado tipo BSON. Exemplo:
db.employees.find( { remuneration: { $type: "double" } } )
Resultado:
{ "_id" :3, "name" :"Fritz", "remuneração" :25000 }
Nesse caso, apenas um documento possui um tipo BSON de double na
remuneration
campo. Vamos ver quais contêm strings:
db.employees.find( { remuneration: { $type: "string" } } )
Resultado:
{ "_id" :1, "name" :"Sandy", "remuneração" :"Demais!!!" }{ "_id" :5, "name" :"Beck", "remuneração" :"10% de comissão" }{ "_id" :6, "name" :"Peter", "remuneração" :"70K" }O
number
Alias
Você pode usar onumber
alias como uma maneira conveniente de retornar documentos que contêm tipos numéricos.
O alias do número corresponde aos seguintes tipos de BSON:
double
32-bit integer
64-bit integer
decimal
Exemplo:
db.employees.find( { remuneration: { $type: "number" } } )
Resultado:
{ "_id" :2, "name" :"Sarah", "remuneração" :128000 }{ "_id" :3, "name" :"Fritz", "remuneração" :25000 }{ "_id" :4, "name" :"Chris", "remuneração" :NumberDecimal("45000.75") }
Verificar vários tipos
Você pode verificar vários tipos fornecendo uma matriz de tipos BSON.
Exemplo:
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} )
Resultado:
{ "_id" :2, "name" :"Sarah", "remuneração" :128000 }{ "_id" :3, "name" :"Fritz", "remuneração" :25000 }{ "_id" :7, "nome" :"Homer", "remuneração" :null }
Filtrar por número
Cada tipo BSON tem um número e um alias correspondentes (conforme descrito na documentação do MongoDB).
Os exemplos anteriores usam o alias. Você também pode usar o número em vez do alias do tipo BSON.
Exemplo:
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} )
Resultado:
{ "_id" :2, "name" :"Sarah", "remuneração" :128000 }{ "_id" :3, "name" :"Fritz", "remuneração" :25000 }{ "_id" :7, "nome" :"Homer", "remuneração" :null }
Neste caso, forneci uma matriz de números que correspondem a
double
, int
e null
(que retorna o mesmo resultado do exemplo anterior). Antes do MongoDB 3.2, apenas números eram aceitos com o
$type
operador de consulta. Os aliases de string só foram aceitos desde o MongoDB 3.2. Retornar o tipo de um campo
Há também um
$type
operador de pipeline de agregação que permite obter o tipo BSON do valor de um campo.