Condividi tramite


$bitsAllClear

L'operatore $bitsAllClear viene usato per trovare le corrispondenze con i documenti in cui tutte le posizioni di bit specificate in una maschera di bit sono chiare, ovvero 0. Questo operatore è utile negli scenari in cui è necessario filtrare i documenti in base a bit specifici da annullare in una rappresentazione binaria di un campo.

Sintassi

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

Parametri

Parametro Description
field Campo nel documento in cui deve essere eseguita l'operazione bit per bit.
<bitmask> Maschera di bit in cui ogni posizione del bit specifica la posizione di bit corrispondente nel valore del campo che deve essere cancellata (0).

Esempi

Si consideri questo documento di esempio dalla raccolta negozi.

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

Il storeFeatures campo è un numero intero maschera di bit che rappresenta varie funzionalità dell'archivio. Ogni bit corrisponde a una funzionalità:

Pezzo Value Caratteristica / Funzionalità
0 1 In-Store ritiro
1 2 Parcheggio
2 4 Accesso alle sedie a rotelle
3 8 Apri 24 ore
4 16 Pet-Friendly
5 32 Wi-Fi gratuite
6 64 Bagni
7 128 Consegna a domicilio

Esempio 1: Trovare negozi che non sono aperti 24 ore e non consentire animali domestici

Questa query recupera gli archivi che non sono aperti 24 ore E non consentono animali domestici (bit 3 e 4)

db.stores.find({
    storeFeatures: {
        $bitsAllClear: [3, 4]
    }
}, {
    _id: 1,
    name: 1,
    storeFeatures: 1
}).limit(5)

Equivalente:

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

I primi cinque risultati restituiti dalla query sono:

[
  {
    "_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
    "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
    "storeFeatures": 38
  },
  {
    "_id": "94792a4c-4b03-466b-91f6-821c4a8b2aa4",
    "name": "Fourth Coffee | Eyewear Shop - Lessiemouth",
    "storeFeatures": 225
  },
  {
    "_id": "1a2c387b-bb43-4b14-a6cd-cc05a5dbfbd5",
    "name": "Contoso, Ltd. | Smart Home Device Vault - Port Katarina",
    "storeFeatures": 36
  },
  {
    "_id": "e88f0096-4299-4944-9788-695c40786d97",
    "name": "Adatum Corporation | Handbag Shoppe - Lucienneberg",
    "storeFeatures": 135
  },
  {
    "_id": "bfb213fa-8db8-419f-8e5b-e7096120bad2",
    "name": "First Up Consultants | Beauty Product Shop - Hansenton",
    "storeFeatures": 135
  }
]