Delen via


$addFields (aggregatie)

De $addFields fase in de aggregatiepijplijn wordt gebruikt om nieuwe velden aan documenten toe te voegen. Het kan ook worden gebruikt om de waarden van bestaande velden opnieuw in te stellen. Deze fase is met name handig wanneer u nieuwe velden moet maken op basis van bestaande gegevens of bestaande velden in uw documenten wilt wijzigen.

Syntaxis

De basissyntaxis voor de $addFields-fase is als volgt:

{
  $addFields: {
    <newField1>: <expression1>,
    <newField2>: <expression2>,
    ...
  }
}

Parameterwaarden

Beschrijving
newField1 De naam van het nieuwe veld dat u wilt toevoegen of het bestaande veld dat u wilt wijzigen.
expression1 De expressie voor het berekenen van de waarde van newField1.

Voorbeeld(en)

Voorbeeld 1: Een nieuw veld toevoegen

Stel dat we een verzameling benoemde archieven hebben met documenten die vergelijkbaar zijn met de opgegeven JSON-structuur. Als u een nieuw veldtotaalDiscountEvents wilt toevoegen waarmee het aantal promotiegebeurtenissen wordt geteld, kunnen we de volgende aggregatiepijplijn gebruiken:

db.stores.aggregate([
  {
    $addFields: {
      totalDiscountEvents: { $size: "$store.promotionEvents" }
    }
  }
])

Voorbeelduitvoer

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

Voorbeeld 2: Een bestaand veld wijzigen

Als we een veld totalStaffCount willen toevoegen dat de fulltime- en parttimemedewerkers optelt, kunnen we het volgende gebruiken:

db.stores.aggregate([
  {
    $addFields: {
      totalStaffCount: {
        $add: ["$store.staff.totalStaff.fullTime", "$store.staff.totalStaff.partTime"]
      }
    }
  }
])

Voorbeelduitvoer

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "staff": {
        "totalStaff": {
          "fullTime": 12,
          "partTime": 8
        }
      }
    },
    "totalStaffCount": 20
  }
]

Voorbeeld 3: Geneste velden toevoegen

Als u een geneste veldlocatie.coördinaten wilt toevoegen waarin breedtegraad en lengtegraad in een matrix worden gecombineerd, gebruikt u:

db.stores.aggregate([
  {
    $addFields: {
      "store.location.coordinates": ["$store.location.lat", "$store.location.lon"]
    }
  }
])

Voorbeelduitvoer

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "store": {
      "name": "Downtown Store",
      "location": {
        "lat": 47.6097,
        "lon": -122.3331,
        "coordinates": [47.6097, -122.3331]
      }
    }
  }
]