MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Operador de consulta do tipo $ do MongoDB


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 o number 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.