$bitsAnySet

Den här operatorn används för att välja dokument där någon av de angivna bitpositionerna är inställda på 1. Det är användbart för att köra frågor mot dokument med fält som lagrar bitmaskvärden. Den här operatorn kan vara praktisk när du arbetar med fält som representerar flera booleska flaggor i ett enda heltal.

Syntax

{
  <field>: { $bitsAnySet: [ <bit positions> ] }
}

Parameterar

Parameter Description
field Fältet som ska frågas.
<bit positions> En matris med bitpositioner för att kontrollera om några är inställda på 1.

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 har upphämtning i butiken eller drive-thru

Den här frågan hämtar butiker som erbjuder antingen hemleverans eller kostnadsfri Wi-Fi (bitar 5 och 7)

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

Ekvivalent:

db.stores.find({
        storeFeatures: {
            $bitsAnySet: 160
        }
    }, // 32 + 128
    {
        _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": "44fdb9b9-df83-4492-8f71-b6ef648aa312",
    "name": "Fourth Coffee | Storage Solution Gallery - Port Camilla",
    "storeFeatures": 222
  },
  {
    "_id": "94792a4c-4b03-466b-91f6-821c4a8b2aa4",
    "name": "Fourth Coffee | Eyewear Shop - Lessiemouth",
    "storeFeatures": 225
  },
  {
    "_id": "728c068a-638c-40af-9172-8ccfa7dddb49",
    "name": "Contoso, Ltd. | Book Store - Lake Myron",
    "storeFeatures": 239
  },
  {
    "_id": "e6410bb3-843d-4fa6-8c70-7472925f6d0a",
    "name": "Relecloud | Toy Collection - North Jaylan",
    "storeFeatures": 108
  }
]