Compartilhar via


$type (consulta de elemento)

APLICA-SE A: MongoDB vCore

O $type operador seleciona documentos se um campo for do tipo especificado. Isso é útil para validação de dados e para garantir a consistência entre documentos em uma coleção. O $type operador aceita números de tipo BSON e aliases de cadeia de caracteres.

Sintaxe

A sintaxe do operador é a $isArray seguinte:

{
  <field>: { $type: <BSON type number> | <string alias> }
}

Parâmetros

Descrição
field O campo para verificar o tipo de.
BSON type number Um número correspondente ao tipo BSON (por exemplo, 1 para duplo, 2 para cadeia de caracteres).
string alias Um alias de cadeia de caracteres para o tipo BSON (por exemplo, "double", "string", "object", "array").

Tipos BSON comuns

Tipo Número Apelido Descrição
Duplo 1 "double" Ponto flutuante de 64 bits
fio 2 "string" Cadeia de caracteres UTF-8
Objeto 3 "object" Documento inserido
Matriz 4 "matriz" Matriz
IdentificadorDeObjeto 7 "objectId" IdentificadorDeObjeto
Booliano oito "bool" Booliano
Data (calendário) 9 "date" Data (calendário)
Nulo 10 "nulo" Valor nulo
Inteiro de 32 bits 16 "int" Inteiro de 32 bits
Timestamp 17 "carimbo de data/hora" Timestamp
Inteiro de 64 bits 18 "long" Inteiro de 64 bits

Exemplo

Vamos entender o uso com json de exemplo do stores conjunto de dados.

{
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": "Trey Research | Home Office Depot - Lake Freeda",
  "location": { "lat": -48.9752, "lon": -141.6816 },
  "staff": { "employeeCount": { "fullTime": 12, "partTime": 19 } },
  "sales": {
    "salesByCategory": [ { "categoryName": "Desk Lamps", "totalSales": 37978 } ],
    "revenue": 37978
  },
  "promotionEvents": [
    {
      "eventName": "Crazy Deal Days",
      "promotionalDates": {
        "startDate": { "Year": 2023, "Month": 9, "Day": 27 },
        "endDate": { "Year": 2023, "Month": 10, "Day": 4 }
      },
      "discounts": [
        { "categoryName": "Desks", "discountPercentage": 22 },
        { "categoryName": "Filing Cabinets", "discountPercentage": 23 }
      ]
    }
  ],
  "company": "Trey Research",
  "city": "Lake Freeda",
  "storeOpeningDate": "2024-09-26T22:55:25.779Z",
  "lastUpdated": "Timestamp({ t: 1729983325, i: 1 })"
}

Exemplo 1: localizar repositórios com nomes de tipo de cadeia de caracteres

O exemplo localiza todos os repositórios em que o name campo é do tipo de cadeia de caracteres.

db.stores.find(
 { "name": { $type: "string" }},
 { "_id": 1, "name": 1 }).limit(1)

A consulta retorna todos os documentos em que o name campo contém um valor de cadeia de caracteres.

{
  "_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
  "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort"
}

Exemplo 2: validação de dados usando várias verificações de tipo

Este exemplo demonstra a validação de que os campos essenciais têm os tipos de dados corretos.

db.stores.find({
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": { $type: "string" },
  "location": { $type: "object" },
  "staff.employeeCount.fullTime": { $type: ["int", "long"] },
  "promotionEvents": { $type: "array" }},
  { "_id": 1, "name": 1,"location":1, "staff": 1 }
)

A consulta retorna repositórios em que todos os campos especificados têm os tipos de dados esperados, ajudando a garantir a consistência dos dados.

{
  "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
  "name": "Trey Research | Home Office Depot - Lake Freeda",
  "location": { "lat": -48.9752, "lon": -141.6816 },
  "staff": { "employeeCount": { "fullTime": 12 } }
}