适用对象: MongoDB vCore
$setField
运算符用于在嵌入文档中添加、更新或删除字段。 此运算符允许对文档字段进行精确操作。 这使得它对于更新嵌套字段、重组文档甚至完全删除字段等任务很有用。
语法
$setField
运算符的语法如下所示:
{
$setField: {
field: <fieldName>,
input: <expression>,
value: <expression>
}
}
field
:要添加、更新或删除的字段的名称。input
:正在处理的文档或字段。value
:要分配给字段的新值。 如果value
是null
,则删除该字段。
示例
示例 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
}
}
}
}]
)