Partilhar via


$bitsAllSet

O $bitsAllSet operador é usado para corresponder documentos onde todas as posições de bit especificadas são definidas (ou seja, são 1). Este operador é útil para executar operações bit a bit em campos que armazenam valores inteiros. Ele pode ser usado em cenários em que você precisa filtrar documentos com base em bits específicos que estão sendo definidos dentro de um campo inteiro.

Sintaxe

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

Parâmetros

Parâmetro Description
field O campo no documento no qual a operação bit a bit deve ser executada.
<bitmask> Uma máscara de bits que indica quais bits devem ser definidos no valor do campo.

Examples

Considere este documento de exemplo da coleção de lojas.

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

O storeFeatures campo é um inteiro de máscara de bits que representa vários recursos de armazenamento. Cada bit corresponde a uma característica:

Pouco Valor Característica
0 1 In-Store Recolha
1 2 Estacionamento
2 4 Acesso para cadeiras de rodas
3 8 Aberto 24 Horas
4 16 Pet-Friendly
5 32 Wi-Fi Grátis
6 64 Banheiros
7 128 Entrega ao Domicílio

Exemplo 1: Encontre lojas que tenham estacionamento e banheiros

Esta consulta recupera lojas que têm estacionamento E banheiros (bits 1 e 6)

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

Equivalente:

db.stores.find({
    storeFeatures: {
        $bitsAllSet: 66
    }
}, {
    _id: 1,
    name: 1,
    storeFeatures: 1
}).limit(5)

Os cinco primeiros resultados retornados por esta consulta são:

[
  {
    "_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": "728c068a-638c-40af-9172-8ccfa7dddb49",
    "name": "Contoso, Ltd. | Book Store - Lake Myron",
    "storeFeatures": 239
  },
  {
    "_id": "a2b54e5c-36cd-4a73-b547-84e21d91164e",
    "name": "Contoso, Ltd. | Baby Products Corner - Port Jerrold",
    "storeFeatures": 126
  },
  {
    "_id": "dda2a7d2-6984-40cc-bbea-4cbfbc06d8a3",
    "name": "Contoso, Ltd. | Home Improvement Closet - Jaskolskiview",
    "storeFeatures": 107
  }
]