$min (字段更新运算符)

适用对象: MongoDB vCore

如果指定的值小于字段的当前值,则 $min 运算符会将字段的值更新为指定值。 如果该字段不存在, $min 请创建字段并将其设置为指定值。 此运算符可用于维护最小阈值或跟踪最低值。

语法

$min 运算符的语法如下:

{
  $min: {
    <field1>: <value1>,
    <field2>: <value2>,
    ...
  }
}

参数

DESCRIPTION
field 要以最小值更新的字段的名称。
value 要与当前字段值进行比较的值。 仅当此值较小时,才会更新字段。

示例:

让我们了解 stores 数据集中的示例 json 的用法。

{
  "_id": "26afb024-53c7-4e94-988c-5eede72277d5",
  "name": "First Up Consultants | Microphone Bazaar - South Lexusland",
  "staff": {
    "totalStaff": {
      "fullTime": 14,
      "partTime": 8
    }
  },
  "sales": {
    "totalSales": 83865,
    "salesByCategory": [
      {
        "categoryName": "Lavalier Microphones",
        "totalSales": 44174
      },
      {
        "categoryName": "Wireless Microphones",
        "totalSales": 39691
      }
    ]
  }
}

示例 1:设置最低员工要求

设置最低员工要求,仅在当前值较高时更新。

db.stores.updateOne(
  { "_id": "26afb024-53c7-4e94-988c-5eede72277d5" },
  {
    $min: {
      "staff.totalStaff.fullTime": 10
    }
  }
)

由于当前 fullTime 值为 14,并且 10 小于 14,因此字段将更新为 10。

示例 2:多个字段更新

使用最小值同时更新多个字段。

db.stores.updateOne(
  { "_id": "26afb024-53c7-4e94-988c-5eede72277d5" },
  {
    $min: {
      "staff.totalStaff.partTime": 12,
      "sales.totalSales": 50000
    }
  }
)

在这种情况下:

  • partTime (8) 自 12 > 8 日起更新为 8 (无变化)
  • totalSales(83865) 自 50000 83865 起将更新为 50000 <

示例 3:创建新字段

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

db.stores.updateOne(
  { "_id": "26afb024-53c7-4e94-988c-5eede72277d5" },
  {
    $min: {
      "staff.minStaffRequired": 15,
      "sales.minimumSalesTarget": 30000
    }
  }
)

示例 4:使用日期

设置跟踪最早事件的最小日期。

db.stores.updateOne(
  { "_id": "26afb024-53c7-4e94-988c-5eede72277d5" },
  {
    $min: {
      "lastInventoryCheck": new Date("2024-01-15"),
      "firstSaleDate": new Date("2023-06-01")
    }
  }
)

示例 5:更新数组元素

使用位置运算符更新数组元素中的最小值。

db.stores.updateOne(
  {
    "_id": "26afb024-53c7-4e94-988c-5eede72277d5",
    "sales.salesByCategory.categoryName": "Lavalier Microphones"
  },
  {
    $min: {
      "sales.salesByCategory.$.totalSales": 40000
    }
  }
)

执行这些作后,文档将按如下所示进行更新:

{
  "_id": "26afb024-53c7-4e94-988c-5eede72277d5",
  "name": "First Up Consultants | Microphone Bazaar - South Lexusland",
  "staff": {
    "totalStaff": {
      "fullTime": 10,
      "partTime": 8
    },
    "minStaffRequired": 15
  },
  "sales": {
    "totalSales": 50000,
    "minimumSalesTarget": 30000,
    "salesByCategory": [
      {
        "categoryName": "Lavalier Microphones",
        "totalSales": 40000
      },
      {
        "categoryName": "Wireless Microphones",
        "totalSales": 39691
      }
    ]
  },
  "lastInventoryCheck": ISODate("2024-01-15T00:00:00.000Z"),
  "firstSaleDate": ISODate("2023-06-01T00:00:00.000Z")
}