$inc

El $inc operador incrementa el valor de un campo por una cantidad especificada. Si el campo no existe, $inc crea el campo y lo establece en el valor especificado. El operador acepta valores positivos y negativos para incrementar y disminuir respectivamente.

Syntax

La sintaxis del $objectToArray operador es la siguiente:

{
  $inc: {
    <field1>: <amount1>,
    <field2>: <amount2>,
    ...
  }
}

Parámetros

Parámetro Description
field Nombre del campo que se va a incrementar.
amount Valor de incremento. Debe ser un número (positivo para incremento, negativo para el decremento).

Examples

Considere este documento de ejemplo de la colección de tiendas.

{
  "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
  "name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
  "staff": {
    "totalStaff": {
      "fullTime": 19,
      "partTime": 20
    }
  },
  "sales": {
    "totalSales": 151864,
    "salesByCategory": [
      {
        "categoryName": "Sound Bars",
        "totalSales": 2120
      },
      {
        "categoryName": "Home Theater Projectors",
        "totalSales": 45004
      }
    ]
  }
}

Ejemplo 1: Incremento del número de personal

Para aumentar el número de personal de tiempo completo en 3, use el operador de $inc en el campo de personal fullTime con un valor de 3.

db.stores.updateOne(
  { "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74" },
  {
    $inc: {
      "staff.totalStaff.fullTime": 3
    }
  }
)

Ejemplo 2: Disminuir y aumentar los valores

Para reducir el personal a tiempo parcial en 2 y aumentar las ventas totales en 5000, use el operador de $inc en ambos campos con valores de -2 y 5000 respectivamente.

db.stores.updateOne(
  { "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74" },
  {
    $inc: {
      "staff.totalStaff.partTime": -2,
      "sales.totalSales": 5000
    }
  }
)

Ejemplo 3: Crear nuevos campos

Si no existe un campo, $inc lo crea con el valor especificado.

db.stores.updateOne(
  { "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74" },
  {
    $inc: {
      "staff.contractorCount": 5,
      "sales.monthlyTarget": 200000
    }
  }
)

Ejemplo 4: Incremento de los valores del elemento de matriz

Actualice cifras de ventas específicas dentro de la matriz salesByCategory mediante operadores posicionales.

db.stores.updateOne(
  { 
    "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
    "sales.salesByCategory.categoryName": "Sound Bars"
  },
  {
    $inc: {
      "sales.salesByCategory.$.totalSales": 500
    }
  }
)

Después de estas operaciones, el documento se actualiza de la siguiente manera:

{
  "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
  "name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
  "staff": {
    "totalStaff": {
      "fullTime": 22,
      "partTime": 18
    },
    "contractorCount": 5
  },
  "sales": {
    "totalSales": 156864,
    "monthlyTarget": 200000,
    "salesByCategory": [
      {
        "categoryName": "Sound Bars",
        "totalSales": 2620
      },
      {
        "categoryName": "Home Theater Projectors",
        "totalSales": 45004
      }
    ]
  }
}