Les opérateurs : $size,$all,$elemMatch

ces opérateurs sont utilisés pour appliquer des conditions sur des attributs de types :array (tableaux)

1.Opérateur $size

$size:permet de vérifier si le nombre d'élément d'un tableau est égale à un nombre donné Exemples:
Afficher la liste des produits qui ont trois promotions seulement
db.produits.find({"moisPromotions:{$size:3}},{})
Afficher la liste des produits qui ont deux promotion et appartient à 3 catégories
db.produits.find({$and:[{"moisPromotions":{$size:2}},{"categories":{$size:3}}]},{})

1.Opérateur $all

$all:permet de vérifier si un tableau contient une lite d'élements
db.collectionName.find({"tableaux:{$all:["element1","element2","élement3"]}},{})
$all :retourne true si les trois elements: element1,element2,et element3 existent dans le tabelau tableaux
Exemples:
Afficher la liste des produits qui ont les promotions :janvier et mars
db.produits.find({"moisPromotions:{$all:["janvier","mars"]}},{})

2.Opérateur $elemMatch

$elemMatch:permet de vérifier si un tableau contient la valeur passée
db.produits.find({"tableaux:{$elemMatch:{:$operateur:"valeur"}}},{})
$operateur un opérateur parmis :$eq,$ne,$lt,$gt,$lte,$gte
Exemple:
Afficher les produit qui ont la promotion du mois janvier
db.produits.find({"moisPromotions":{$elemMatch:{$eq:"janvier"}}},{})

Exemples

  • 11Comment puis-je trouver tous les produits qui ont à la fois "janvier" et "octobre" comme mois de promotion ? Utilisez la méthode find() avec l'opérateur $all pour rechercher les produits avec les deux mois de promotion :
    db.produits.find({ moisPromotions: { $all: ["janvier", "octobre"] } })
    
  • 12Comment puis-je trouver tous les produits avec une catégorie contenant une description qui commence par "une" ? Utilisez la méthode find() avec l'opérateur $elemMatch et $regex pour rechercher les produits avec des catégories correspondantes :
    db.produits.find({ categories: { $elemMatch: { description: /^une/ } } })
    
  • 13Comment puis-je trouver le produit dont le fournisseur a un numéro de téléphone égal à "0315455" ? Utilisez la méthode findOne() pour trouver le premier produit avec le numéro de téléphone du fournisseur spécifié :
    db.produits.findOne({ "fournisseurs.tel": "0315455" })
    
  • 14Comment puis-je trouver tous les produits dont la quantité de catégories est supérieure à 2 ? Utilisez la méthode find() avec l'opérateur $where et JavaScript pour rechercher les produits avec plus de 2 catégories :
    db.produits.find({ $where: "this.categories.length > 2" })
    
  • 15Comment puis-je trouver tous les produits ayant à la fois "category1" et "category2" comme noms de catégorie dans leurs catégories ? Utilisez la méthode find() avec l'opérateur $and pour rechercher les produits avec les deux catégories :
    db.produits.find({ $and: [ { "categories.nom": "category1" }, { "categories.nom": "category2" } ] })
    
  • 16Comment puis-je trouver le premier produit avec le nom de catégorie "category1" dans ses catégories ? Utilisez la méthode findOne() avec l'opérateur $elemMatch pour rechercher le premier produit avec la catégorie correspondante :
    db.produits.findOne({ categories: { $elemMatch: { nom: "category1" } } })
    
  • 17Comment puis-je trouver tous les produits dont la quantité est égale à 40 ? Utilisez la méthode find() avec l'opérateur $eq pour rechercher les produits avec une quantité de 40 :
    db.produits.find({ quantite: { $eq: 40 } })
    
  • 18Comment puis-je trouver tous les produits dont la quantité est différente de 30 ? Utilisez la méthode find() avec l'opérateur $ne pour rechercher les produits avec une quantité différente de 30 :
    db.produits.find({ quantite: { $ne: 30 } })
    
  • 19Comment puis-je trouver tous les noms de fournisseurs distincts parmi tous les produits ? Utilisez la méthode distinct() pour obtenir la liste des noms de fournisseurs uniques :
    db.produits.distinct("fournisseurs.nom")
    
  • 20Comment puis-je trouver tous les produits ayant un fournisseur avec un numéro de téléphone différent de "1234567" ? Utilisez la méthode find() avec l'opérateur $ne pour rechercher les produits avec un fournisseur différent :
    db.produits.find({ "fournisseurs.tel": { $ne: "1234567" } })
    
  • 21Comment puis-je trouver tous les produits dont la quantité de catégories est inférieure à 3 ? Utilisez la méthode find() avec l'opérateur $where et JavaScript pour rechercher les produits avec moins de 3 catégories :
    db.produits.find({ $where: "this.categories.length < 3" })
    
  • 22Comment puis-je trouver tous les produits qui ont au moins une catégorie avec une description contenant "catégorie" ? Utilisez la méthode find() avec l'opérateur $elemMatch et $regex pour rechercher les produits avec au moins une catégorie correspondante :
    db.produits.find({ categories: { $elemMatch: { description: /catégorie/ } } })
    
  • 23Comment puis-je trouver le produit avec le prix le plus bas ? Utilisez la méthode find() avec l'opérateur $sort pour trier par prix croissant et limit pour obtenir le premier produit :
    db.produits.find().sort({ prix: 1 }).limit(1)
    
  • 24Comment puis-je trouver tous les produits ayant à la fois "janvier" et "octobre" comme mois de promotion en utilisant l'opérateur $and ? Utilisez la méthode find() avec l'opérateur $and pour rechercher les produits avec les deux mois de promotion :
    db.produits.find({ $and: [ { moisPromotions: "janvier" }, { moisPromotions: "octobre" } ] })
    
  • 25Comment puis-je trouver le premier produit dont le fournisseur a un numéro de téléphone qui n'est pas "0315455" ? Utilisez la méthode findOne() avec l'opérateur $ne pour trouver le premier produit avec un fournisseur différent :
    db.produits.findOne({ "fournisseurs.tel": { $ne: "0315455" } })
    
  • 26Comment puis-je trouver tous les produits dont le prix est supérieur à 50 et qui ont à la fois "janvier" et "octobre" comme mois de promotion ? Utilisez la méthode find() avec plusieurs critères pour rechercher les produits correspondants :
    db.produits.find({ prix: { $gt: 50 }, moisPromotions: { $all: ["janvier", "octobre"] } })
    
  • 27Comment puis-je trouver le produit avec le nom de catégorie "category2" dans ses catégories, et dont le fournisseur a un numéro de téléphone commençant par "031" ? Utilisez la méthode find() avec les opérateurs $elemMatch et $regex pour rechercher le produit correspondant :
    db.produits.find({ categories: { $elemMatch: { nom: "category2" } }, "fournisseurs.tel": { $regex: /^031/ } })
    
  • 28Comment puis-je trouver tous les produits ayant une catégorie avec une description commençant par "une" et un fournisseur dont le nom est "fournisseur1" ? Utilisez la méthode find() avec les opérateurs $elemMatch et $and pour rechercher les produits correspondants :
    db.produits.find({ categories: { $elemMatch: { description: /^une/ } }, "fournisseurs.nom": "fournisseur1" })
    
  • 29Comment puis-je trouver tous les produits ayant au moins deux catégories et un mois de promotion "janvier" ? Utilisez la méthode find() avec les opérateurs $size et $all pour rechercher les produits correspondants :
    db.produits.find({ categories: { $size: 2 }, moisPromotions: { $all: ["janvier"] } })
    
  • 30Comment puis-je trouver tous les produits ayant au moins une catégorie avec une description contenant "catégorie" et un fournisseur avec un numéro de téléphone différent de "1234567" ? Utilisez la méthode find() avec les opérateurs $elemMatch et $ne pour rechercher les produits correspondants :
    db.produits.find({ categories: { $elemMatch: { description: /catégorie/ } }, "fournisseurs.tel": { $ne: "1234567" } })
    
  • 31Comment puis-je trouver tous les produits dont la quantité est inférieure à 50 et qui ont au moins une catégorie avec une description contenant "une" ? Utilisez la méthode find() avec les opérateurs $lt, $elemMatch, et $regex pour rechercher les produits correspondants :
    db.produits.find({ quantite: { $lt: 50 }, categories: { $elemMatch: { description: /une/ } } })
    
  • 32Comment puis-je trouver tous les produits dont la quantité est égale à 40 et qui ont au moins une catégorie avec une description commençant par "une" ou "deux" ? Utilisez la méthode find() avec les opérateurs $eq, $elemMatch, et $or pour rechercher les produits correspondants :
    db.produits.find({ quantite: { $eq: 40 }, categories: { $elemMatch: { description: { $regex: /^(une|deux)/ } } } })
    
  • 33Comment puis-je trouver le produit avec le nom de catégorie "category1" dans ses catégories, et un fournisseur avec un numéro de téléphone commençant par "031545" ? Utilisez la méthode findOne() avec les opérateurs $elemMatch et $regex pour rechercher le produit correspondant :
    db.produits.findOne({ categories: { $elemMatch: { nom: "category1" } }, "fournisseurs.tel": { $regex: /^031545/ } })
    
  • 34Comment puis-je trouver tous les produits ayant au moins une catégorie avec une description contenant "catégorie1" et au moins un mois de promotion "janvier" ? Utilisez la méthode find() avec les opérateurs $elemMatch et $or pour rechercher les produits correspondants :
    db.produits.find({ $or: [ { categories: { $elemMatch: { description: /catégorie1/ } } }, { moisPromotions: "janvier" } ] })
    
  • 35Comment puis-je trouver tous les produits ayant exactement deux catégories, dont l'une a une description commençant par "une" et l'autre a une description contenant "deux" ? Utilisez la méthode find() avec l'opérateur $size et les opérateurs $elemMatch et $regex pour rechercher les produits correspondants :
    db.produits.find({ categories: { $size: 2, $elemMatch: { description: /^une/ } }, categories: { $elemMatch: { description: /deux/ } } })
    
  • 36Comment puis-je trouver tous les produits dont le prix est supérieur à 50, ayant à la fois "janvier" et "octobre" comme mois de promotion, et dont le fournisseur a un numéro de téléphone commençant par "031" ? Utilisez la méthode find() avec plusieurs critères pour rechercher les produits correspondants :
    db.produits.find({ prix: { $gt: 50 }, moisPromotions: { $all: ["janvier", "octobre"] }, "fournisseurs.tel": { $regex: /^031/ } })
    
  • 37Comment puis-je trouver le produit avec au moins deux catégories, dont l'une a une description commençant par "une" et l'autre a une description contenant "deux", et dont le fournisseur a un nom différent de "fournisseur2" ? Utilisez la méthode findOne() avec les opérateurs $size, $elemMatch, $regex, et $ne pour rechercher le produit correspondant :
    db.produits.findOne({ categories: { $size: 2, $elemMatch: { description: /^une/ } }, categories: { $elemMatch: { description: /deux/ } }, "fournisseurs.nom": { $ne: "fournisseur2" } })
    
  • 38Comment puis-je trouver tous les produits qui ont au moins une catégorie avec une description commençant par "une" et un mois de promotion "janvier" ou "mars" ? Utilisez la méthode find() avec les opérateurs $elemMatch et $or pour rechercher les produits correspondants :
    db.produits.find({ categories: { $elemMatch: { description: /^une/ } }, moisPromotions: { $in: ["janvier", "mars"] } })
    
  • 39Comment puis-je trouver le produit avec le nom de catégorie "category2" dans ses catégories, dont le fournisseur a un numéro de téléphone différent de "0315455" ? Utilisez la méthode findOne() avec les opérateurs $elemMatch et $ne pour rechercher le produit correspondant :
    db.produits.findOne({ categories: { $elemMatch: { nom: "category2" } }, "fournisseurs.tel": { $ne: "0315455" } })
    
  • 40Comment puis-je trouver tous les produits ayant au moins une catégorie avec une description commençant par "catégorie"1 et un fournisseur dont le nom est "fournisseur1" ou "fournisseur2" ? Utilisez la méthode find() avec les opérateurs $elemMatch et $or pour rechercher les produits correspondants :
    db.produits.find({ categories: { $elemMatch: { description: /^catégorie1/ } }, $or: [ { "fournisseurs.nom": "fournisseur1" }, { "fournisseurs.nom": "fournisseur2" } ] })
    
  • 41Comment puis-je trouver tous les produits ayant exactement deux catégories, dont l'une a une description commençant par "une" et l'autre a une description contenant "catégorie" ? Utilisez la méthode find() avec l'opérateur $size et les opérateurs $elemMatch et $regex pour rechercher les produits correspondants :
    db.produits.find({ categories: { $size: 2, $elemMatch: { description: /^une/ } }, categories: { $elemMatch: { description: /catégorie/ } } })
    
  • 42Comment puis-je trouver le produit avec un prix supérieur à 50 et dont le fournisseur a un nom différent de "fournisseur2" ? Utilisez la méthode findOne() avec les opérateurs $gt et $ne pour rechercher le produit correspondant :
    db.produits.findOne({ prix: { $gt: 50 }, "fournisseurs.nom": { $ne: "fournisseur2" } })
    
  • 43Comment puis-je trouver tous les produits ayant à la fois "janvier" et "octobre" comme mois de promotion et un fournisseur dont le nom est "fournisseur1" ? Utilisez la méthode find() avec les opérateurs $and pour rechercher les produits correspondants :
    db.produits.find({ $and: [ { moisPromotions: "janvier" }, { moisPromotions: "octobre" }, { "fournisseurs.nom": "fournisseur1" } ] })
    
  • 44Comment puis-je trouver tous les produits dont la quantité est supérieure à 30, ayant au moins une catégorie avec une description contenant "deux" et un mois de promotion "mars" ? Utilisez la méthode find() avec les opérateurs $gt, $elemMatch, et $and pour rechercher les produits correspondants :
    db.produits.find({ quantite: { $gt: 30 }, categories: { $elemMatch: { description: /deux/ } }, moisPromotions: "mars" })