Delen via


$and (Booleaanse expressie)

TOEPASBAAR OP: MongoDB vCore

De $and operator retourneert true wanneer alle expressies worden geëvalueerd true. Hiermee wordt een logische AND-bewerking uitgevoerd op een matrix met expressies. Als een expressie wordt geëvalueerd, retourneert false$andde volledige false expressie. Deze operator is handig voor het combineren van meerdere voorwaarden waaraan moet worden voldaan.

Syntaxis

De syntaxis voor de $and operator is als volgt:

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

Parameterwaarden

Beschrijving
<expression1>, <expression2>, ... Twee of meer expressies die moeten worden geëvalueerd. Alle expressies moeten evalueren om true de $and bewerking te retourneren true.

Voorbeeld

Voorbeeld 1: Winkels met hoge verkoop en voldoende personeel zoeken

In het voorbeeld vindt u winkels met zowel de totale verkoop groter dan 100.000 als meer dan 30 personeelsleden.

db.stores.aggregate([
  {
    $project: {
      name: 1,
      totalSales: "$sales.totalSales",
      totalStaff: {
        $add: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"]
      },
      meetsHighPerformanceCriteria: {
        $and: [
          { $gt: ["$sales.totalSales", 100000] },
          { $gt: [{ $add: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"] }, 30] }
        ]
      }
    }
  },
  { $limit: 2 }
])

De query retourneert winkels die voldoen aan zowel hoge verkoop- als personeelscriteria.

  {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "name": "Trey Research | Home Office Depot - Lake Freeda",
    "totalStaff": 31,
    "meetsHighPerformanceCriteria": false
  },
  {
    "_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
    "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
    "totalStaff": 27,
    "meetsHighPerformanceCriteria": false
  }

Voorbeeld 2: Datums van promotieevenementen valideren

In het voorbeeld wordt gecontroleerd of promotie-gebeurtenissen zowel geldige begin- als einddatums hebben (alle datumonderdelen zijn positieve getallen).

db.stores.aggregate([
  { $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
  {
    $project: {
      name: 1,
      promotionEvents: {
        $map: {
          input: "$promotionEvents",
          as: "event",
          in: {
            eventName: "$$event.eventName",
            hasValidDates: {
              $and: [
                { $gt: ["$$event.promotionalDates.startDate.Year", 0] },
                { $gt: ["$$event.promotionalDates.startDate.Month", 0] },
                { $gt: ["$$event.promotionalDates.startDate.Day", 0] },
                { $gt: ["$$event.promotionalDates.endDate.Year", 0] },
                { $gt: ["$$event.promotionalDates.endDate.Month", 0] },
                { $gt: ["$$event.promotionalDates.endDate.Day", 0] }
              ]
            }
          }
        }
      }
    }
  }
])

De query valideert dat alle datumonderdelen positieve getallen zijn voor zowel begin- als einddatums.

 {
    "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
    "name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
    "promotionEvents": [
      { "eventName": "Massive Markdown Mania", "hasValidDates": true },
      { "eventName": "Fantastic Deal Days", "hasValidDates": true },
      { "eventName": "Discount Delight Days", "hasValidDates": true },
      { "eventName": "Super Sale Spectacular", "hasValidDates": true },
      { "eventName": "Grand Deal Days", "hasValidDates": true },
      { "eventName": "Major Bargain Bash", "hasValidDates": true }
    ]
  }