$type

L’opérateur $type récupère des documents si un champ choisi est du type spécifié. L’opérateur $type est utile dans la validation des données et garantit la cohérence entre les documents d’une collection.

Syntaxe

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

Paramètres

Paramètre 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

Type Number Alias Descriptif
Double 1 "double" Virgule flottante 64 bits
Chaîne 2 "string" Chaîne UTF-8
Objet 3 "object" Document incorporé
Array 4 "array" Array
Identifiant d'objet (ObjectId) 7 "objectId" Identifiant d'objet (ObjectId)
Booléen 8 "bool" Booléen
Date 9 "date" Date
Null 10 "null" Valeur Null
Entier de 32 bits 16 "int" Entier de 32 bits
Timestamp 17 "timestamp" Timestamp
Valeur entière 64 bits. 18 "long" Valeur entière 64 bits.

Examples

Considérez cet exemple de document de la collection des magasins.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

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

Pour rechercher un magasin dont le nom est de type chaîne, exécutez une requête à l’aide de l’opérateur $type sur le champ nom. Ensuite, projetez uniquement les champs ID et nom et limitez les résultats à un document du jeu de résultats.

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

Cette requête retourne le résultat suivant :

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

Cette requête montre comment valider que les champs essentiels de la structure de documents de la collection ont les types de données souhaités.

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

Cette requête retourne le résultat suivant.

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