$inc

$inc 运算符按指定量递增字段的值。 如果该字段不存在, $inc 请创建该字段并将其设置为指定的值。 运算符接受正值和负值,以便分别递增和递减。

Syntax

运算符的 $isArray 语法如下所示:

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

参数

参数 Description
field 要递增的字段的名称。
amount 增量值。 必须是一个数字(递增为正,递减为负)。

例子

请考虑商店集合中的这个示例文档。

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

示例 1:递增员工计数

若要将全职员工计数增加 3,请使用 fullTime 员工字段中的 $inc 运算符,值为 3。

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

示例 2:减少和增加值

若要将兼职员工减少 2,总销售额增加 5000 人,请分别对两个字段使用$inc运算符,其值为 -2 和 5000。

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

示例 3:创建新字段

如果字段不存在, $inc 请使用指定的值创建它。

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

示例 4:递增数组元素值

使用位置运算符更新 salesByCategory 数组中的特定销售数据。

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

执行这些作后,文档将更新如下:

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