$setField 作为对象表达式运算符

适用对象: MongoDB vCore

$setField 运算符用于在嵌入文档中添加、更新或删除字段。 此运算符允许对文档字段进行精确操作。 这使得它对于更新嵌套字段、重组文档甚至完全删除字段等任务很有用。

语法

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

{
  $setField: {
    field: <fieldName>,
    input: <expression>,
    value: <expression>
  }
}
  • field:要添加、更新或删除的字段的名称。
  • input:正在处理的文档或字段。
  • value:要分配给字段的新值。 如果 valuenull,则删除该字段。

示例

示例 1:更新嵌套字段

假设你想要更新“夏季销售”促销活动中“笔记本电脑”类别的 discountPercentage

db.collection.updateOne(
  { "store.storeId": "12345" },
  [{
    $set: {
      "store.promotionEvents": {
        $map: {
          input: "$store.promotionEvents",
          as: "event",
          in: {
            $setField: {
              field: "discounts",
              input: "$$event",
              value: {
                $map: {
                  input: "$$event.discounts",
                  as: "discount",
                  in: {
                    $cond: {
                      if: { $eq: ["$$discount.categoryName", "Laptops"] },
                      then: { 
                        categoryName: "$$discount.categoryName", 
                        discountPercentage: 18 
                      },
                      else: "$$discount"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }]
)

示例 2:删除字段

假设你想要从 staff 对象中删除 totalStaff 字段。

db.collection.updateOne(
  { "store.storeId": "12345" },
  [{
    $set: {
      "store.staff": {
        $setField: {
          field: "totalStaff",
          input: "$store.staff",
          value: null
        }
      }
    }
  }]
)