$size(数组查询)

适用对象: MongoDB vCore

$size 运算符用于查询数组字段具有指定数量的元素的文档。 如果需要根据数组字段的大小查找文档,例如在列表中查找包含某些项的文档,则此运算符非常有用。

语法

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

parameters

说明
field 包含数组的字段。
number 数组应包含的元素数量。

示例

让我们了解 stores 数据集中的示例 json 的用法。

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

示例 1:查找数组中具有特定数量元素的文档

示例从 stores 集合中检索文档,其中 sales.salesByCategory 数组恰好包含 7 个项目。

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

此查询返回受 limit 子句限制的 stores 集合中的两个文档。

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