$bitsNågonRensa

Den här operatorn används för att matcha dokument där någon av bitpositionerna som anges i en bitmask är tydliga (d.s.a. 0). Det är användbart för att fråga dokument med binära data eller flaggor som lagras som heltal. Den här operatorn möjliggör effektiv frågekörning baserat på specifika bitmönster.

Syntax

{
  <field>: { $bitsAnyClear: <bitmask> }
}

Parameterar

Parameter Description
field Fältet i dokumentet som ska frågas.
<bitmask> En bitmask där varje bitposition representerar en position för att kontrollera om den är klar (0).

Examples

Överväg det här exempeldokumentet från butiksamlingen.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Fältet storeFeatures är ett bitmask-heltal som representerar olika lagringsfunktioner. Varje bit motsvarar en funktion:

Bit Värde Feature
0 1 In-Store upphämtning
1 2 Parkering
2 4 Rullstolsåtkomst
3 8 Öppet 24 timmar
4 16 Pet-Friendly
5 32 Kostnadsfri Wi-Fi
6 64 Toaletter
7 128 Hemleverans

Exempel 1: Hitta butiker som inte har Wi-Fi eller upphämtning i butiken

Den här frågan hämtar butiker som inte har antingen Wi-Fi ELLER upphämtning i butiken (bitar 0 och 5)

db.stores.find({
    storeFeatures: {
        $bitsAnyClear: [0, 5]
    }
}, {
    _id: 1,
    name: 1,
    storeFeatures: 1
}).limit(5)

Ekvivalent:

db.stores.find({
        storeFeatures: {
            $bitsAnySet: 33
        }
    }, // 1 + 32
    {
        _id: 1,
        name: 1,
        storeFeatures: 1
    }).limit(5)

De första fem resultaten som returneras av den här frågan är:

[
  {
    "_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
    "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
    "storeFeatures": 38
  },
  {
    "_id": "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
    "name": "Contoso, Ltd. | Office Supply Deals - South Shana",
    "storeFeatures": 86
  },
  {
    "_id": "44fdb9b9-df83-4492-8f71-b6ef648aa312",
    "name": "Fourth Coffee | Storage Solution Gallery - Port Camilla",
    "storeFeatures": 222
  },
  {
    "_id": "e6410bb3-843d-4fa6-8c70-7472925f6d0a",
    "name": "Relecloud | Toy Collection - North Jaylan",
    "storeFeatures": 108
  },
  {
    "_id": "9024d615-eed0-429a-a098-6640207cc2b6",
    "name": "Adatum Corporation | Paper Product Mart - Lake Coralie",
    "storeFeatures": 204
  }
]