Поделиться через


$setIsSubset

Оператор $setIsSubset возвращает логическое значение, указывающее, является ли один массив подмножеством второго массива. Он обрабатывает массивы как наборы, что означает, что он игнорирует повторяющиеся элементы и порядок элементов. Возвращается true , если все элементы первого массива существуют во втором массиве. В противном случае возвращается false.

Синтаксис

{
  $setIsSubset: [ <array1>, <array2> ]
}

Параметры

Параметр Описание
<array1> Массив, проверяющий, является ли он подмножеством <array2>.
<array2> Массив для проверки.

Примеры

Рассмотрим этот пример документа из коллекции магазинов.

{
  "_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
  "name": "First Up Consultants | Bed and Bath Center - South Amir",
  "location": {
    "lat": 60.7954,
    "lon": -142.0012
  },
  "staff": {
    "totalStaff": {
      "fullTime": 18,
      "partTime": 17
    }
  },
  "sales": {
    "totalSales": 37701,
    "salesByCategory": [
      {
        "categoryName": "Mattress Toppers",
        "totalSales": 37701
      }
    ]
  },
  "promotionEvents": [
    {
      "eventName": "Price Drop Palooza",
      "promotionalDates": {
        "startDate": {
          "Year": 2024,
          "Month": 9,
          "Day": 21
        },
        "endDate": {
          "Year": 2024,
          "Month": 9,
          "Day": 30
        }
      },
      "discounts": [
        {
          "categoryName": "Bath Accessories",
          "discountPercentage": 18
        },
        {
          "categoryName": "Pillow Top Mattresses",
          "discountPercentage": 17
        },
        {
          "categoryName": "Bathroom Scales",
          "discountPercentage": 9
        },
        {
          "categoryName": "Towels",
          "discountPercentage": 5
        },
        {
          "categoryName": "Bathrobes",
          "discountPercentage": 5
        },
        {
          "categoryName": "Mattress Toppers",
          "discountPercentage": 6
        },
        {
          "categoryName": "Hand Towels",
          "discountPercentage": 9
        },
        {
          "categoryName": "Shower Heads",
          "discountPercentage": 5
        },
        {
          "categoryName": "Bedspreads",
          "discountPercentage": 19
        },
        {
          "categoryName": "Bath Mats",
          "discountPercentage": 21
        }
      ]
    }
  ]
}

Пример 1. Определение того, являются ли категории продаж подмножеством категорий продвижения

Этот запрос определяет, включены ли все категории магазина в их скидки на повышение, и наоборот. Этот запрос возвращает категории, включенные как в скобки продаж, так и в рекламных скобках. Он подтверждает, что sales значение является подмножеством определенной категории продвижения (но не выполняет обратное).

db.stores.aggregate([
  { $match: {"_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f"} },
  {
    $project: {
      name: 1,
      salesCategories: "$sales.salesByCategory.categoryName",
      promotionCategories: { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] },
      salesAreSubsetOfPromotions: {
        $setIsSubset: [
          "$sales.salesByCategory.categoryName",
          { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] }
        ]
      },
      promotionsAreSubsetOfSales: {
        $setIsSubset: [
          { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] },
          "$sales.salesByCategory.categoryName"
        ]
      }
    }
  }
])

Этот запрос возвращает следующий результат.

[
  {
    "_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
    "name": "First Up Consultants | Bed and Bath Center - South Amir",
    "salesCategories": [
      "Mattress Toppers"
    ],
    "promotionCategories": [
      "Bath Accessories",
      "Pillow Top Mattresses",
      "Bathroom Scales",
      "Towels",
      "Bathrobes",
      "Mattress Toppers",
      "Hand Towels",
      "Shower Heads",
      "Bedspreads",
      "Bath Mats"
    ],
    "salesAreSubsetOfPromotions": true,
    "promotionsAreSubsetOfSales": false
  }
]