Compartir a través de


$bitsAllClear

El $bitsAllClear operador se usa para buscar coincidencias con documentos en los que todas las posiciones de bits especificadas en una máscara de bits están claras (es decir, 0). Este operador es útil en escenarios en los que es necesario filtrar documentos en función de bits específicos que no se establece en una representación binaria de un campo.

Syntax

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

Parámetros

Parámetro Description
field Campo del documento en el que se va a realizar la operación bit a bit.
<bitmask> Máscara de bits donde cada posición de bits especifica la posición de bits correspondiente en el valor del campo que debe estar claro (0).

Examples

Considere este documento de ejemplo de la colección de tiendas.

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

El storeFeatures campo es un entero de máscara de bits que representa diversas funcionalidades de almacén. Cada bit corresponde a una característica:

bit Importancia Característica
0 1 In-Store Recogida
1 2 Aparcamiento
2 4 Acceso para silla de ruedas
3 8 Abrir 24 horas
4 16 Pet-Friendly
5 32 Wi-Fi gratis
6 64 Cuartos de baño
7 128 Entrega doméstica

Ejemplo 1: Buscar tiendas que no están abiertas las 24 horas y no permitir mascotas

Esta consulta recupera almacenes que NO están abiertos las 24 horas Y NO permiten mascotas (bits 3 y 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)

Los cinco primeros resultados devueltos por esta consulta son:

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