Delen via


$bitNot (bitsgewijze expressie)

TOEPASBAAR OP: MongoDB vCore

De $bitNot operator voert een bitwise NOT-bewerking uit op gehele getallen. Het keert alle bits van de operand om, waarbij 1's worden omgezet in 0's en 0s in 1s. Het resultaat is het bitsgewijze complement van de invoerwaarde.

Syntaxis

De syntaxis voor de $bitNot operator is als volgt:

{
  $bitNot: <expression>
}

Parameterwaarden

Beschrijving
expression Een expressie die resulteert in een geheel getal. De $bitNot operator voert een bitwise NOT-bewerking uit op deze waarde.

Voorbeeld

Laten we het gebruik begrijpen met voorbeeld-json uit stores de gegevensset.

{
  "_id": "26afb024-53c7-4e94-988c-5eede72277d5",
  "name": "First Up Consultants | Microphone Bazaar - South Lexusland",
  "location": {
    "lat": -29.1866,
    "lon": -112.7858
  },
  "staff": {
    "totalStaff": {
      "fullTime": 14,
      "partTime": 8
    }
  },
  "sales": {
    "totalSales": 83865,
    "salesByCategory": [
      {
        "categoryName": "Lavalier Microphones",
        "totalSales": 44174
      },
      {
        "categoryName": "Wireless Microphones",
        "totalSales": 39691
      }
    ]
  },
  "promotionEvents": [
    {
      "eventName": "Incredible Savings Showcase",
      "promotionalDates": {
        "startDate": {
          "Year": 2024,
          "Month": 9,
          "Day": 21
        },
        "endDate": {
          "Year": 2024,
          "Month": 9,
          "Day": 29
        }
      },
      "discounts": [
        {
          "categoryName": "Condenser Microphones",
          "discountPercentage": 20
        },
        {
          "categoryName": "Microphone Stands",
          "discountPercentage": 17
        }
      ]
    }
  ]
}

Voorbeeld 1: Eenvoudige bitsgewijze NOT-bewerking

Voer een bitsgewijze NOT-bewerking uit op personeelsnummers om omgekeerde vlaggen te maken.

db.stores.aggregate([
  { $match: {"_id": "26afb024-53c7-4e94-988c-5eede72277d5"} },
  {
    $project: {
      name: 1,
      fullTimeStaff: "$staff.totalStaff.fullTime",
      partTimeStaff: "$staff.totalStaff.partTime",
      invertedFullTime: {
        $bitNot: "$staff.totalStaff.fullTime"
      },
      invertedPartTime: {
        $bitNot: "$staff.totalStaff.partTime"
      }
    }
  }
])

Dit produceert de volgende uitvoer:

[
  {
    _id: '26afb024-53c7-4e94-988c-5eede72277d5',
    name: 'First Up Consultants | Microphone Bazaar - South Lexusland',
    fullTimeStaff: 14,
    partTimeStaff: 8,
    invertedFullTime: -15,
    invertedPartTime: -9
  }
]

De bitsgewijze NOT van 14 resulteert in -15 en de bitsgewijze NOT van 8 resulteert in -9. Dit komt door de complementweergave van twee, waarbij ~n = -(n+1).

Voorbeeld 2: $bitNot gebruiken met kortingspercentages

Bitwise NOT-bewerkingen toepassen op kortingspercentages.

db.stores.aggregate([
  { $match: {"_id": "26afb024-53c7-4e94-988c-5eede72277d5"} },
  { $unwind: "$promotionEvents" },
  { $match: {"promotionEvents.eventName": "Incredible Savings Showcase"} },
  { $unwind: "$promotionEvents.discounts" },
  {
    $project: {
      name: 1,
      eventName: "$promotionEvents.eventName",
      categoryName: "$promotionEvents.discounts.categoryName",
      discountPercentage: "$promotionEvents.discounts.discountPercentage",
      invertedDiscount: {
        $bitNot: "$promotionEvents.discounts.discountPercentage"
      }
    }
  }
])

Dit produceert de volgende uitvoer:

[
  {
    _id: '26afb024-53c7-4e94-988c-5eede72277d5',
    name: 'First Up Consultants | Microphone Bazaar - South Lexusland',
    eventName: 'Incredible Savings Showcase',
    categoryName: 'Condenser Microphones',
    discountPercentage: 20,
    invertedDiscount: -21
  },
  {
    _id: '26afb024-53c7-4e94-988c-5eede72277d5',
    name: 'First Up Consultants | Microphone Bazaar - South Lexusland',
    eventName: 'Incredible Savings Showcase',
    categoryName: 'Microphone Stands',
    discountPercentage: 17,
    invertedDiscount: -18
  }
]

Met de bitsgewijze NOT-bewerking worden alle bits omgekeerd: 20 wordt -21 en 17 wordt -18.