Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. MongoDB
  3. Les vues
Extrait - MongoDB Comprendre et optimiser l'exploitation de vos données (avec exercices et corrigés) (2e édition)
Extraits du livre
MongoDB Comprendre et optimiser l'exploitation de vos données (avec exercices et corrigés) (2e édition) Revenir à la page d'achat du livre

Les vues

Introduction

Introduites depuis la version 3.4 de MongoDB, les vues opèrent indifféremment sur des collections ou bien d’autres vues et résident forcément dans la même base de données que ces dernières. Elles constituent en quelque sorte des collections en lecture seule et lorsqu’elles portent sur des collections, elles peuvent utiliser les mêmes index que celles-ci. Il est toutefois impossible de modifier les index d’une collection à partir d’une vue basée sur celle-ci, tout comme il est impossible de renommer une vue (elle devra être détruite avec drop, exactement comme nous l’avons fait pour les collections qui ont servi à nos nombreux exemples, puis recréée).

Créer une vue

Les vues utilisent le framework d’agrégation. Il existe deux façons de les créer : en utilisant une méthode raccourcie dans le shell ou bien en exécutant directement la commande de base de données à laquelle la première méthode sert de wrapper.

Pour la première façon d’opérer, la syntaxe est la suivante:

db.createView(< nom >, < source >, < pipeline >, < collation > ) 

De ces quatre paramètres, collation est le seul qui soit optionnel. Le nom de la vue sera le premier des paramètres requis, suivi de source qui désigne la vue ou la collection cible et pipeline qui est un tableau contenant votre pipeline d’agrégation. Si vous préférez utiliser les commandes, vous privilégierez cette syntaxe-là :

db.runCommand( { create: < nom >, viewOn: < source >, 
pipeline: < pipeline >, collation: < collation> } ) 

Pour utiliser les vues, nous allons créer une collection nommée stock avec quelques documents :

db.stock.insertMany([ 
{"nom": "Lames rasoir x 8", "qte": 256, "prix" : 12.99, "sku": 
"ST-01-235"}, 
{"nom": "Encens - pack de 12", "qte": 2135, "prix" : 5.99, "sku": "SW-66-985"}, ...

Interagir avec les vues

Comme pour une collection, nous appellons la méthode find sur cette vue :

db.inventaire.find() 

Le résultat de cette invocation sera :

[ 
  { nom: 'Lames rasoir x 8', quantite: 256 }, 
  { nom: 'Encens - pack de 12', quantite: 2135 }, 
  { nom: 'Bougies couleur', quantite: 7836 } 
] 

Nous pouvons utiliser le tri sur la vue, par exemple un tri par ordre décroissant sur la quantité :

db.inventaire.find().sort({"quantite": -1}) 

ou bien un tri naturel :

db.inventaire.find().sort({$natural: 1}) 

Opérations de lecture disponibles sur les vues

Outre find que nous venons de voir, les opérations suivantes sont utilisables sur des vues :

  • findOne()

  • aggregate()

  • countDocuments()

  • estimatedDocumentCount()

  • distinct()

À retenir

  • Les vues opèrent indifféremment sur des collections ou bien d’autres vues et résident forcément dans la même base de données que ces dernières.

  • Il est impossible de les renommer, elles devront être détruites avec drop puis recréées.

La définition d’une vue est publique, il faut donc faire attention aux données sensibles qui peuvent y figurer.