Partager via


$type (requête d’élément)

S’APPLIQUE À : MongoDB vCore

L’opérateur $type sélectionne des documents si un champ est du type spécifié. Cela est utile pour la validation des données et garantir la cohérence entre les documents d’une collection. L’opérateur $type accepte les numéros de type BSON et les alias de chaîne.

Syntaxe

La syntaxe de l’opérateur $type est la suivante :

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

Paramètres

Descriptif
field Champ pour vérifier le type de.
BSON type number Nombre correspondant au type BSON (par exemple, 1 pour le double, 2 pour la chaîne).
string alias Alias de chaîne pour le type BSON (par exemple, « double », « string », « object », « array »).

Types BSON courants

Catégorie Numéro Pseudonyme Descriptif
Double 1 « double » Virgule flottante 64 bits
Chaîne 2 « string » Chaîne UTF-8
Objet 3 « object » Document incorporé
Tableau 4 « array » Tableau
Identifiant d'objet (ObjectId) 7 « objectId » Identifiant d'objet (ObjectId)
Booléen 8 « bool » Booléen
Date (Jour/Mois/Année) 9 « date » Date (Jour/Mois/Année)
Zéro 10 « null » Valeur Null
Entier de 32 bits 16 « int » Entier de 32 bits
Horodatage 17 « timestamp » Horodatage
Entier 64 bits 18 « long » Entier 64 bits

Exemple :

Comprenons l’utilisation avec l’exemple JSON du jeu de stores données.

{
  "_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 })"
}

Exemple 1 : Rechercher des magasins avec des noms de type chaîne

L’exemple recherche tous les magasins où le name champ est de type chaîne.

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

La requête retourne tous les documents où le name champ contient une valeur de chaîne.

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

Exemple 2 : Validation des données à l’aide de plusieurs vérifications de type

Cet exemple montre comment valider que les champs essentiels ont les types de données corrects.

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

La requête retourne des magasins où tous les champs spécifiés ont les types de données attendus, ce qui permet de garantir la cohérence des données.

{
  "_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 } }
}