Utiliser les types de base MongoDB

MongoDBBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à travailler avec divers types de données fondamentaux dans MongoDB. Le laboratoire couvre des exemples pratiques sur la manière de stocker, interroger et manipuler des données à l'aide de nombres, de chaînes de caractères, de booléens, de dates et d'ObjectIds. Vous acquerrez une expérience pratique en effectuant des opérations de base de données courantes et en comprenant les cas d'utilisation appropriés pour chaque type de données. À la fin de ce laboratoire, vous aurez une base solide pour modéliser efficacement les données dans MongoDB.

Travailler avec les nombres et les chaînes de caractères

Dans cette première étape, vous apprendrez à utiliser les types de données les plus courants : les nombres et les chaînes de caractères. Vous démarrerez le shell MongoDB, créerez une base de données et une collection, puis insérerez et interrogerez des documents contenant ces types.

Tout d'abord, ouvrez votre terminal et lancez le shell MongoDB. Cet environnement interactif vous permet d'exécuter des commandes directement sur votre base de données.

mongosh

Une fois dans le shell, vous verrez une invite >. Créons et basculons vers une nouvelle base de données nommée inventory. Dans MongoDB, une base de données est créée automatiquement lorsque vous y stockez des données pour la première fois.

use inventory

Maintenant, créez une collection nommée products et insérez un document. Ce document contiendra un champ de type chaîne de caractères (name) et deux champs de type numérique (price et stock). MongoDB utilise des types BSON (Binary JSON), où les nombres peuvent être des entiers ou des nombres à virgule flottante (doubles).

db.products.insertOne({
    name: "Laptop",
    price: 1200.50,
    stock: 50
})

Vous devriez voir un message de confirmation avec l'ObjectId du document nouvellement inséré.

Exemple de sortie :

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Maintenant que le document est inséré, interrogeons la collection. Tout d'abord, recherchez les produits dont le prix est supérieur à 1000 en utilisant l'opérateur $gt (greater than - supérieur à).

db.products.find({ price: { $gt: 1000 } })

Exemple de sortie :

[
  {
    _id: ObjectId("..."),
    name: 'Laptop',
    price: 1200.5,
    stock: 50
  }
]

Ensuite, effectuez une requête pour trouver un produit par son nom exact, qui est une valeur de chaîne de caractères. C'est une façon courante de récupérer des éléments spécifiques.

db.products.find({ name: "Laptop" })

Cette commande retournera le même document, démontrant comment interroger en fonction des champs de type chaîne de caractères.

Utilisation des booléens et des valeurs null

Dans cette étape, vous allez explorer les types de données booléens et null. Les booléens sont idéaux pour les champs qui représentent un état vrai ou faux, tels que les indicateurs (flags). Le type null est utilisé pour représenter un champ sans valeur.

Continuons à utiliser la base de données inventory dans le shell mongosh. Insérez un nouveau produit avec les champs booléens inStock et onSale, et un champ discontinuedDate défini sur null.

db.products.insertOne({
    name: "Wireless Mouse",
    price: 25,
    inStock: true,
    onSale: false,
    discontinuedDate: null
})

Exemple de sortie :

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Vous avez maintenant un document avec des valeurs booléennes et null. Vous pouvez les interroger comme tout autre type de données. Trouvons tous les produits actuellement en stock en interrogeant la valeur booléenne true.

db.products.find({ inStock: true })

Exemple de sortie :

[
  {
    _id: ObjectId("..."),
    name: 'Wireless Mouse',
    price: 25,
    inStock: true,
    onSale: false,
    discontinuedDate: null
  }
]

Cette commande récupère les documents où le champ inStock est exactement true. Ensuite, trouvons les produits qui n'ont pas été arrêtés en recherchant une valeur null dans le champ discontinuedDate. Notez qu'en MongoDB, l'interrogation de null correspond à la fois aux documents où le champ est explicitement défini sur null et aux documents où le champ n'existe pas du tout.

db.products.find({ discontinuedDate: null })

Cette requête retournera plusieurs documents : la "Wireless Mouse" (qui a discontinuedDate: null) et tous les autres produits qui n'ont pas de champ discontinuedDate du tout (comme "Laptop"). Si vous souhaitez trouver uniquement les documents où le champ est explicitement défini sur null, vous devrez utiliser un modèle de requête différent.

Stocker les dates et les horodatages

Cette étape se concentre sur le type de données Date, essentiel pour stocker des informations basées sur le temps, telles que les dates de création, de mise à jour ou les événements. MongoDB stocke les dates sous forme d'entiers de 64 bits représentant les millisecondes écoulées depuis l'époque Unix (1er janvier 1970, UTC).

Insérons un document avec des champs de date. Vous pouvez créer un objet date pour l'heure actuelle en utilisant new Date() ou pour une heure spécifique en passant une chaîne de date au format ISO-8601.

db.products.insertOne({
    name: "Smartwatch",
    price: 250,
    purchaseDate: new Date("2023-10-26T10:00:00Z"),
    lastUpdated: new Date()
})

Exemple de sortie :

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Maintenant, recherchons des produits en fonction de leurs champs de date. Par exemple, trouvons tous les produits achetés à partir du début de l'année 2023. Vous pouvez utiliser l'opérateur $gte (greater than or equal to - supérieur ou égal à) avec un objet Date.

db.products.find({
    purchaseDate: { $gte: new Date("2023-01-01") }
})

Exemple de sortie :

[
  {
    _id: ObjectId("..."),
    name: 'Smartwatch',
    price: 250,
    purchaseDate: ISODate('2023-10-26T10:00:00.000Z'),
    lastUpdated: ISODate('...')
  }
]

MongoDB fournit également des opérateurs de mise à jour pour les dates. L'opérateur $currentDate est utile pour définir un champ à la date actuelle du serveur. Mettons à jour le champ lastUpdated du document "Laptop" que vous avez créé précédemment pour suivre quand il a été modifié pour la dernière fois.

db.products.updateOne(
    { name: "Laptop" },
    { $currentDate: { lastUpdated: true } }
)

Exemple de sortie :

{
  "acknowledged": true,
  "insertedId": null,
  "matchedCount": 1,
  "modifiedCount": 1,
  "upsertedCount": 0
}

Cette opération trouve le document dont le nom est "Laptop" et met à jour son champ lastUpdated avec l'horodatage actuel.

Comprendre les ObjectIds et les tableaux

Dans cette dernière étape, vous découvrirez deux types structurels importants : ObjectId et Array (tableau). Chaque document dans MongoDB possède un champ _id unique, qui est par défaut un ObjectId s'il n'est pas fourni. Les tableaux vous permettent de stocker des listes de valeurs dans un seul champ.

Tout d'abord, insérons un document avec un champ tableau nommé tags. Ceci est utile pour stocker plusieurs catégories ou attributs.

db.products.insertOne({
    name: "Mechanical Keyboard",
    price: 75,
    tags: ["gaming", "mechanical", "RGB"]
})

Exemple de sortie :

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

L'insertedId est l'ObjectId de ce nouveau document. C'est une valeur de 12 octets qui garantit l'unicité. Vous pouvez rechercher un document par son _id. Tout d'abord, trouvez le document et stockez son _id dans une variable.

const keyboard = db.products.findOne({ name: "Mechanical Keyboard" })
const keyboardId = keyboard._id

Maintenant, utilisez cette variable keyboardId pour récupérer à nouveau le document. C'est le moyen le plus efficace de récupérer un seul document spécifique.

db.products.findOne({ _id: keyboardId })

Ensuite, travaillons avec le tableau tags. Vous pouvez rechercher des documents dont le tableau contient un élément spécifique. Par exemple, pour trouver tous les produits étiquetés "gaming" :

db.products.find({ tags: "gaming" })

Exemple de sortie :

[
  {
    _id: ObjectId("..."),
    name: 'Mechanical Keyboard',
    price: 75,
    tags: [ 'gaming', 'mechanical', 'RGB' ]
  }
]

Cette commande trouve efficacement tous les documents où le tableau tags inclut la chaîne "gaming". Les tableaux sont une fonctionnalité puissante pour modéliser des relations au sein d'un seul document. Pour quitter le shell MongoDB, tapez exit ou appuyez sur Ctrl+D.

exit

Résumé

Dans ce laboratoire, vous avez appris à travailler avec les types de données les plus essentiels de MongoDB. Vous avez commencé par utiliser des nombres et des chaînes de caractères pour stocker et interroger des informations sur les produits. Vous avez ensuite exploré les booléens et la valeur null pour représenter des indicateurs de statut et des données manquantes. Vous avez également appris à gérer les données temporelles en utilisant le type Date et ses opérateurs associés. Enfin, vous avez acquis une compréhension de l'ObjectId en tant qu'identifiant unique et du type Array pour stocker des listes de valeurs. Ces connaissances constituent une base solide pour la conception et l'interaction avec les bases de données MongoDB pour un large éventail d'applications.