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


$unset (агрегация)

$unset этап конвейера агрегирования используется для удаления указанных полей из документов. Это может быть особенно полезно, если необходимо исключить определенные поля из результатов запроса агрегирования по таким причинам, как конфиденциальность, уменьшение размера полезных данных или просто очистка выходных данных.

Синтаксис

Синтаксис $unset этапа прост. Он принимает один аргумент, который может быть именем поля или массивом имен полей, которые будут удалены из документов.

{
  $unset: "<field1>" | ["<field1>", "<field2>", ...]
}

Параметры

Описание
field1, field2, ... Имена полей, которые нужно удалить из документов.

Примеры

Ниже приведены несколько примеров использования этапа $unset в конвейере агрегирования.

Пример 1. Удаление одного поля

Предположим, вы хотите удалить поле расположения из документов.

db.stores.aggregate([
  {
    $unset: "store.location"
  }
])

Пример полученных результатов

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "sales": {
        "totalSales": 15000,
        "salesByCategory": [
          {
            "category": "Electronics",
            "totalSales": 5000
          },
          {
            "category": "Clothing",
            "totalSales": 10000
          }
        ]
      }
    }
  }
]

Пример 2. Удаление нескольких полей

Предположим, вы хотите удалить поля location и sales.totalSales из документов.

db.stores.aggregate([
  {
    $unset: ["store.location", "store.sales.totalSales"]
  }
])

Пример полученных результатов

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "sales": {
        "salesByCategory": [
          {
            "category": "Electronics",
            "totalSales": 5000
          },
          {
            "category": "Clothing",
            "totalSales": 10000
          }
        ]
      }
    }
  }
]

Пример 3. Удаление вложенных полей

Предположим, вы хотите удалить поля staff.totalStaff.fullTime и promotionEvents.discounts из документов.

db.stores.aggregate([
  {
    $unset: ["store.staff.totalStaff.fullTime", "store.promotionEvents.discounts"]
  }
])

Пример полученных результатов

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "staff": {
        "totalStaff": {
          "partTime": 8
        }
      },
      "promotionEvents": ["Summer Sale", "Black Friday", "Holiday Deals"]
    }
  }
]