定义
$unset$unset操作符删除特定字段。
兼容性
可以使用 $unset 查找托管在以下环境中的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
$unset 操作符采用以下形式:
{ $unset: { <field1>: "", ... } }
$unset 表达式中的指定值(即 "")不影响操作。
要在嵌入式文档或数组中指定 <field>,请使用点符号。
行为
从 MongoDB 5.0 开始,更新操作符按字典顺序处理具有基于字符串的名称的文档字段。具有数字名称的字段按数字顺序处理。详情请参阅更新操作符行为。
如果该字段不存在,则 $unset 不执行任何操作(即不执行任何操作)。
与 $ 一起使用来匹配数组元素时,$unset 用 null 替换匹配元素,而不是从数组中删除匹配的元素。此行为使数组大小和元素位置保持一致。
从 MongoDB 5.0 开始,使用带空操作数表达式 ({ }) 的更新操作符(如 $unset)时,mongod 不会再引发错误。空更新不会导致任何变化,也不会创建 oplog 条目(意味着该操作为“无操作”)。
例子
本页上的示例使用sample_mflix示例数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载示例数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
以下示例使用$unset操作符从匹配的电影文档中删除 label 和 status 字段:
db.movies.updateOne( { title: "The Dark Knight" }, { $unset: { label: "", status: "" } } )
操作返回以下结果:
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }