Aracılığıyla paylaş


$size (dizi sorgusu)

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB sanal çekirdeği

işleci $size , bir dizi alanının belirtilen sayıda öğeye sahip olduğu belgeleri sorgulamak için kullanılır. Bu işleç, bir dizi alanının boyutuna göre belgeler bulmanız gerektiğinde (örneğin, bir listedeki bazı öğelere sahip belgeleri bulma) kullanışlıdır.

Sözdizimi

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

Parametreler

Açıklama
field Diziyi içeren alan.
number Dizinin sahip olması gereken öğe sayısı.

Örnek

Şimdi veri kümesinden stores alınan örnek json ile kullanımı anlayalım.

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

Örnek 1: Dizide belirli sayıda öğe içeren belgeleri bulma

Örnek, dizinin tam olarak 7 öğe içerdiği stores koleksiyondaki sales.salesByCategory belgeleri alır.

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

Bu sorgu koleksiyondaki iki belgeyi yan tümcesine stores göre limit kısıtlanmış olarak döndürür.

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