Partager via


$nor (requête logique)

S’APPLIQUE À : MongoDB vCore

L’opérateur $nor effectue une opération NOR logique sur un tableau d’expressions et sélectionne les documents qui échouent toutes les expressions spécifiées.

Syntaxe

{ $nor: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

Paramètres

Paramètre Catégorie Descriptif
expression Array Tableau d’expressions, dont toutes doivent être false pour qu’un document soit inclus

Exemples

Exemple 1 : Opération NOR de base

Trouvez des magasins qui n’ont ni plus de 15 employés à temps plein ni plus de 20 employés à temps partiel :

db.stores.find({
  $nor: [
    { "staff.totalStaff.fullTime": { $gt: 15 } },
    { "staff.totalStaff.partTime": { $gt: 20 } }
  ]
})

Cela produit la sortie suivante :

      {
        eventName: 'Steal the Show Sale',
        promotionalDates: {
          startDate: { Year: 2024, Month: 6, Day: 23 },
          endDate: { Year: 2024, Month: 7, Day: 1 }
        },
        discounts: [
          { categoryName: 'Charms', discountPercentage: 10 },
          { categoryName: 'Bracelets', discountPercentage: 13 }
        ]
      }

Exemple 2 : Opération NOR complexe

Recherchez les magasins qui n’ont pas ces conditions : ventes totales supérieures à 1 00000, ventes de « montres numériques » ou promotions en septembre 2024 :

db.stores.find({
  $nor: [
    { "sales.totalSales": { $gt: 100000 } },
    { "sales.salesByCategory.categoryName": "Digital Watches" },
    {
      "promotionEvents": {
        $elemMatch: {
          "promotionalDates.startDate.Month": 9,
          "promotionalDates.startDate.Year": 2024
        }
      }
    }
  ]
})

Cela produit la sortie suivante :

  {
    _id: 'binary-test',
    name: 'Test Store',
    logo: Binary(Buffer.from("627566666572", "hex"), 0),
    signature: Binary(Buffer.from("74657374", "hex"), 0)
  }

Exemple 3 : NOR avec plusieurs conditions de champ

Recherchez les magasins qui ne répondent à aucun de ces critères d’emplacement et de personnel :

db.stores.find({
  $nor: [
    { "location.lat": { $gt: 0 } },
    { "staff.totalStaff.fullTime": { $lt: 10 } },
    { "sales.totalSales": { $gt: 50000 } }
  ]
})

Cela produit la sortie suivante :

  {
    _id: 'db5051a8-17d1-4b01-aa2f-31e64623e5ac',
    name: 'First Up Consultants | Watch Mart - Port Zack',
    location: { lat: -62.6354, lon: 46.2917 },
    staff: { totalStaff: { fullTime: 12, partTime: 9 } },
    sales: {
      totalSales: 6118,
      salesByCategory: [ { categoryName: 'Digital Watches', totalSales: 6118 } ]
    },
    promotionEvents: [
      {
        eventName: 'Incredible Bargain Blitz',
        promotionalDates: {
          startDate: { Year: 2024, Month: 6, Day: 23 },
          endDate: { Year: 2024, Month: 6, Day: 30 }
        },
        discounts: [
          {
            categoryName: 'Chronograph Watches',
            discountPercentage: 13
          },
          { categoryName: 'Diving Watches', discountPercentage: 21 }
        ]
      },
      {
        eventName: 'Fantastic Deals Festival',
        promotionalDates: {
          startDate: { Year: 2024, Month: 9, Day: 21 },
          endDate: { Year: 2024, Month: 9, Day: 29 }
        },
        discounts: [
          { categoryName: 'Digital Watches', discountPercentage: 25 },
          { categoryName: 'Pilot Watches', discountPercentage: 17 }
        ]
      }
    ]
  }