Sdílet prostřednictvím


$bitsAnyClear

Tento operátor se používá ke shodě dokumentů, u kterých je jasná jakákoli pozice bitu zadaná v bitové maskě (to znamená 0). Je užitečné dotazovat se na dokumenty pomocí binárních dat nebo příznaků uložených jako celá čísla. Tento operátor umožňuje efektivní dotazování na základě konkrétních bitových vzorů.

Syntaxe

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

Parametry

Parameter Description
field Pole v dokumentu, které se má dotazovat.
<bitmask> Bitová maska, kde každá pozice bitu představuje pozici, která zkontroluje, jestli je jasná (0).

Examples

Podívejte se na tento ukázkový dokument z kolekce stores.

{
    "_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
                }
            ]
        }
    ]
}

Pole storeFeatures je celé číslo bitové masky představující různé možnosti úložiště. Každý bit odpovídá funkci:

Bit Hodnota Vlastnost
0 1 vyzvednutí In-Store
1 2 Parkoviště
2 4 Bezbariérový přístup
3 8 Otevřeno 24 hodin
4 16 Pet-Friendly
5 32 Bezplatné Wi-Fi
6 64 Toalety
7 128 Doručování domů

Příklad 1: Vyhledání obchodů, které nemají Wi-Fi nebo vyzvednutí v obchodě

Tento dotaz načte obchody, které nemají buď Wi-Fi, nebo vyzvednutí v obchodě (bity 0 a 5).

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

Ekvivalentní:

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

Prvních pět výsledků vrácených tímto dotazem:

[
  {
    "_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
  }
]