Compartir a través de


$size (consulta de matriz)

SE APLICA A: núcleo virtual de MongoDB

El $size operador se usa para consultar documentos en los que un campo de matriz tiene un número especificado de elementos. Este operador es útil cuando necesita buscar documentos en función del tamaño de un campo de matriz, como buscar documentos con algunos elementos de una lista.

Sintaxis

db.collection.find({ <field>: { $size: <number> } })

Parámetros

Descripción
field Campo que contiene la matriz.
number Número de elementos que debe tener la matriz.

Ejemplo

Vamos a comprender el uso con json de ejemplo del conjunto de stores datos.

{
  "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
  "name": "Lakeshore Retail",
  "sales": {
    "salesByCategory": [
      {
        "categoryName": "Towel Racks",
        "totalSales": 13237
      },
      {
        "categoryName": "Washcloths",
        "totalSales": 44315
      },
      {
        "categoryName": "Face Towels",
        "totalSales": 42095
      },
      {
        "categoryName": "Toothbrush Holders",
        "totalSales": 47912
      },
      {
        "categoryName": "Hybrid Mattresses",
        "totalSales": 48660
      },
      {
        "categoryName": "Napkins",
        "totalSales": 31439
      },
      {
        "categoryName": "Pillow Cases",
        "totalSales": 38833
      }
    ]},
"tag": [
    '#ShopLocal',
    '#FashionStore',
    '#SeasonalSale',
    '#FreeShipping',
    '#MembershipDeals'
  ]
}

Ejemplo 1: Buscar documentos con un número específico de elementos en una matriz

En el ejemplo se recuperan documentos de la stores colección donde la sales.salesByCategory matriz contiene exactamente 7 elementos.

db.stores.find(  { "sales.salesByCategory": { $size: 7 }}
                ,{"_id":1,"name":1,"sales.salesByCategory":1}
                ).limit(2)

Esta consulta devuelve los dos documentos de la stores colección como restringido por limit la cláusula .

{
  "_id": "7ed4b356-1290-433e-bd96-bf95f817eaaa",
  "name": "Wide World Importers",
  "sales": {
    "salesByCategory": [
      {
        "categoryName": "Ultrabooks",
        "totalSales": 31304
      },
      {
        "categoryName": "Laptop Accessories",
        "totalSales": 10044
      },
      {
        "categoryName": "Laptops",
        "totalSales": 48851
      },
      {
        "categoryName": "Refill Kits",
        "totalSales": 9604
      },
      {
        "categoryName": "Prepaid Phones",
        "totalSales": 28600
      },
      {
        "categoryName": "Android Phones",
        "totalSales": 4580
      },
      {
        "categoryName": "Photo Printers",
        "totalSales": 35234
      }
    ]
  }
}
{
  "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
  "name": "Lakeshore Retail",
  "sales": {
    "salesByCategory": [
      {
        "categoryName": "Towel Racks",
        "totalSales": 13237
      },
      {
        "categoryName": "Washcloths",
        "totalSales": 44315
      },
      {
        "categoryName": "Face Towels",
        "totalSales": 42095
      },
      {
        "categoryName": "Toothbrush Holders",
        "totalSales": 47912
      },
      {
        "categoryName": "Hybrid Mattresses",
        "totalSales": 48660
      },
      {
        "categoryName": "Napkins",
        "totalSales": 31439
      },
      {
        "categoryName": "Pillow Cases",
        "totalSales": 38833
      }
    ]
  }
}