Les fonctions limit ,skip ,count,sort

1.limit

limit(x):permet d'afficher x documents Exemples:
Afficher les deux premiere produits
db.produits.find({},{}).limit(2)
équivalent à SQL commande:
select * from produit limit 0,2

2.skip

skip(i):permet d'afficher les resultats à apartir de l'indice i Exemples:
Afficher le nom et le prix du deuxième produit
db.produits.find({},{nom:1,prix:1}).skip(1).limit(1)
Equivalent en SQL:
select nom,prix from produit limit 1,1

3.count

count:permet d'afficher le nombre de documents d'une requete find Exemples:
Afficher le nombre de produit du fournisseur fournisseur 1
db.produits.find({"fournisseur.nom":"fournisseur1"},{}).count()
Equivalent en SQL:
select count(*) from produits where nomfournisseur="founisseur1"
Afficher le dernier produits de la marque marque1
db.produits.find({"marque":"marque1"},{}).skip(db.produits.find({"marque":"marque1"},{}).count()-1)

Remarque

count() peut etre appliqué directement à une collection
db.nomCollection.count({Condition})
Avec count() :Afficher le dernier produits de la marque marque1
db.produits.find({"marque":"marque1"},{}).skip(db.produits.count({"marque":"marque1"})-1)
Afficher les trois derniers produits
db.produits.find().skip(db.produits.count()-3)
Afficher les premiers 50% du documents
db.produits.find().limit(db.produits.count()/2)
Afficher les dernières 50% du documents
db.produits.find().skip(db.produits.count()/2)

4.sort

sort:permet de trier les resultats de la fonctions find()
sort({attribut:1,attribut2:-1,....})
1:trier en ordre croissant (petit vers le plus grand)
-1:trier en ordre décroissant (grand vers le plus petit)
Exemples:
Trier les produits en prix décroissant
db.produits.find({},{}).sort({"prix":-1})
Afficher les marques des produit triés par les founisseur en ordre croissant
db.produits.find({},{marque:1,"fournisseur.nom":1}).sort({"fournisseur.nom":-1})

Remarque

On peut appliquer les fonctions skip() et limit() sur les résultats de la fonction sort(()
Exemple:
db.produits.find({},{nom:1,prix:1}).sort({prix:-1,nom:1}).skip(2).limit(1)
Afficher le produit le plus chère
db.produits.find().sort({"prix":-1}).limit(1)
Afficher les trois produit les moins chère
db.produits.find().sort({"prix":1}).limit(3)
Afficher les top 10 produit en stock (quantité plus grande)
db.produits.find().sort("quantite":-1).limit(10)

Exemples

  • 1Q Comment puis-je trouver ce produit par son ID ?
    db.produits.find({ _id: 1 })`.
  • 2Q Quels produits ont un prix égal à 45.2 ?
    db.produits.find({ prix: 45.2 })`.
  • 3Q Quels produits ont une quantité inférieure à 50 ?
    db.produits.find({ quantite: { $lt: 50 } })`.
  • 4Q Comment puis-je obtenir les produits avec une catégorie "category1" ou "category2" ?
    db.produits.find({ "categories.nom": { $in: ["category1", "category2"] } })`.
  • 5Q Quels produits n'ont pas de catégorie "category3" ?
    db.produits.find({ "categories.nom": { $ne: "category3" } })`.
  • 6Q Comment puis-je récupérer les produits qui sont en promotion en janvier ou mars ?
    db.produits.find({ moisPromotions: { $in: ["janvier", "mars"] } })`.
  • 7Q Quels produits ont un fournisseur avec un numéro de téléphone défini ?
    db.produits.find({ "fournisseurs.tel": { $exists: true } })`.
  • 8Q Combien de produits ont un prix inférieur à 60 ?
    db.produits.find({ prix: { $lt: 60 } }).count()` pour obtenir le nombre de produits répondant à cette condition.
    
    
  • 9Q Quels produits n'ont pas de description de catégorie ?
    db.produits.find({ "categories.description": { $exists: false } })`.
  • 10Q Comment puis-je trier les produits par prix de manière décroissante ?
    db.produits.find({}).sort({ prix: -1 })`.
  • 11Q Quels produits ont une marque différente de "marque2" ?
    db.produits.find({ marque: { $ne: "marque2" } })`.
  • 12Q Quels produits n'ont pas de fournisseur avec un nom contenant "fournisseur" (insensible à la casse) ?
    db.produits.find({ "fournisseurs.nom": { $not: { $regex: /fournisseur/i } } })`.
  • 13Q Comment puis-je obtenir les produits avec un prix compris entre 40 et 50 ?
    db.produits.find({ prix: { $gte: 40, $lte: 50 } })`.
  • 14Q Combien de produits ont une catégorie "category1" ?
    db.produits.find({ "categories.nom": "category1" }).count()` pour obtenir le nombre de produits dans cette catégorie.
    
    
  • 15Q Quels produits ont une quantité supérieure ou égale à 30 et en promotion en octobre ?
    db.produits.find({ quantite: { $gte: 30 }, moisPromotions: "octobre" })`.
  • 16Q Comment puis-je projeter uniquement les noms des produits ?
    db.produits.find({}, { nom: 1, _id: 0 })`.
  • 17Q Quels produits ont une catégorie "category1" et une quantité supérieure à 20 ?
    db.produits.find({ "categories.nom": "category1", quantite: { $gt: 20 } })`.
  • 18Q Quels produits n'ont pas de mois de promotion en février ou avril ?
    db.produits.find({ moisPromotions: { $nin: ["février", "avril"] } })`.
  • 19Q Comment puis-je obtenir les produits avec un fournisseur dont le nom commence par "fourn" (insensible à la casse) et un numéro de téléphone qui se termine par "455" ?
    db.produits.find({ $and: [{ "fournisseurs.nom": { $regex: /^fourn/i } }, { "fournisseurs.tel": { $regex: /455$/ } }] })`.
  • 20Q Quels produits ont un prix inférieur à 40 ou une quantité inférieure à 10 ?
    db.produits.find({ $or: [{ prix: { $lt: 40 } }, { quantite: { $lt: 10 } }] })`.
  • 21Q Combien de produits ont une marque "marque1" ou "marque2" ?
    db.produits.find({ marque: { $in: ["marque1", "marque2"] }).count()` pour obtenir le nombre de produits correspondants.
    
    
  • 22Q Quels produits ont une catégorie "category1" et une description de catégorie définie ?
    db.produits.find({ "categories.nom": "category1", "categories.description": { $exists: true } })`.
  • 23Q Comment puis-je trier les produits par nom, puis par prix, de manière croissante ?
    db.produits.find({}).sort({ nom: 1, prix: 1 })`.
  • 24Q Quels produits ont une quantité supérieure à 30 et un prix inférieur à 50 ?
    db.produits.find({ quantite: { $gt: 30 }, prix: { $lt: 50 } })`.
  • 25Q Quels produits n'ont pas de mois de promotion en janvier ni en février ?
    db.produits.find({ moisPromotions: { $nin: ["janvier", "février"] } })`.
  • 26Q Comment puis-je obtenir les produits avec un fournisseur dont le nom contient "fournisseur" (insensible à la casse) ou un numéro de téléphone qui commence par "031" ?
    db.produits.find({ $or: [{ "fournisseurs.nom": { $regex: /fournisseur/i } }, { "fournisseurs.tel": { $regex: /^031/ } }] })`.
  • 27Q Combien de produits ont une catégorie différente de "category3" ?
    db.produits.find({ "categories.nom": { $ne: "category3" } }).count()` pour obtenir le nombre de produits correspondants.
    
    
  • 28Q Quels produits ont une description de catégorie qui n'est pas de type "string" ?
    db.produits.find({ "categories.description": { $not: { $type: "string" } } })`.
  • 29Q Comment puis-je projeter uniquement le nom, le prix et la quantité des produits ?
    db.produits.find({}, { nom: 1, prix: 1, quantite: 1, _id: 0 })`.
  • 30Q Quels produits ont une catégorie différente de "category4" et une quantité inférieure à 30 ?
    db.produits.find({ "categories.nom": { $ne: "category4" }, quantite: { $lt: 30 } })`.
  • 31Q Quels produits n'ont pas de mois de promotion en septembre et n'ont pas de fournisseur avec un numéro de téléphone défini ?
    db.produits.find({ $and: [{ moisPromotions: { $nin: ["septembre"] } }, { "fournisseurs.tel": { $exists: false } }] })`.
  • 32Q Comment puis-je obtenir les produits avec un prix égal à 45.2 et une quantité égale à 40 ?
    db.produits.find({ prix: 45.2, quantite: 40 })`.
  • 33Q Quels produits ont un mois de promotion en "octobre" et une marque différente de "marque3" ?
    db.produits.find({ $and: [{ moisPromotions: "octobre" }, { marque: { $ne: "marque3" } }] })`.
  • 34Q Combien de produits ont une catégorie "category2" et une description de catégorie définie ?
    db.produits.find({ "categories.nom": "category2", "categories.description": { $exists: true } }).count()` pour obtenir le nombre de produits correspondants.
    
    
  • 35Q Quels produits ont un prix inférieur ou égal à 45.2 et un mois de promotion en "octobre" ?
    db.produits.find({ prix: { $lte: 45.2 }, moisPromotions: "octobre" })`.
  • 36Q Comment puis-je obtenir les produits avec une catégorie "category1" ou une catégorie "category2" et une quantité supérieure à 25 ?
    db.produits.find({ $or: [{ "categories.nom": "category1" }, { "categories.nom": "category2" }], quantite: { $gt: 25 } })`.
  • 37Q Quels produits ont un fournisseur dont le nom est "fournisseur1" et un numéro de téléphone qui ne commence pas par "03" ?
    db.produits.find({ "fournisseurs.nom": "fournisseur1", "fournisseurs.tel": { $not: { $regex: /^03/ } } })`.
  • 38Q Combien de produits ont une description de catégorie de type "string" ?
    db.produits.find({ "categories.description": { $type: "string" } }).count()` pour obtenir le nombre de produits correspondants.
    
    
  • 39Q Quels produits ont un prix supérieur à 40 et une quantité inférieure à 35 ?
    db.produits.find({ prix: { $gt: 40 }, quantite: { $lt: 35 } })`.
  • 40Q Quels produits ont un mois de promotion en "janvier" ou "octobre" et une marque "marque1" ?
    db.produits.find({ $and: [{ moisPromotions: { $in: ["janvier", "octobre"] }, marque: "marque1" }] })`.
  • 41Q Comment puis-je obtenir les produits avec une catégorie différente de "category4" et un fournisseur dont le numéro de téléphone est défini ?
    db.produits.find({ "categories.nom": { $ne: "category4" }, "fournisseurs.tel": { $exists: true } })`.
  • 42Q Quels produits ont un prix égal à 45.2 et un mois de promotion en "mars" ?
    db.produits.find({ prix: 45.2, moisPromotions: "mars" })`.
  • 43Q Combien de produits ont une quantité supérieure ou égale à 30 et une description de catégorie de type "string" ?
    db.produits.find({ quantite: { $gte: 30 }, "categories.description": { $type: "string" } }).count()` pour obtenir le nombre de produits correspondants.
    
    
  • 44Q Quels produits ont un mois de promotion en "janvier" et une catégorie "category1" ?
    db.produits.find({ moisPromotions: "janvier", "categories.nom": "category1" })`.
  • 45Q Comment puis-je trier les produits par nom, puis par prix, de manière décroissante, et obtenir les 5 premiers ?
    db.produits.find({}).sort({ nom: -1, prix: -1 }).limit(5)`.