如何从MongoDB文档中删除字段($unset)

发布于

在MongoDB中,您可以使用字段更新运算符从文档中完全删除字段。$unset

运算符专门设计用于从文档中删除字段及其值。$unset

例

假设我们有一个包含以下文档的集合:dogs

{ “_id” : 1, “name” : “Wag”, “type” : “Dog”, “weight” : 20 } { “_id” : 2, “name” : “Bark”, “type” : “Dog”, “weight” : 10 } { “_id” : 6, “name” : “Fetch”, “type” : “Dog”, “weight” : 17 } { “_id” : 7, “name” : “Jake”, “type” : “Dog”, “weight” : 30 }

假设我们要从所有文档中删除该字段(及其各自的值)。type

我们可以这样做:

db.dogs.updateMany(
   { },
   { $unset: { type: "" } }
)

输出:

{ “acknowledged” : true, “matchedCount” : 4, “modifiedCount” : 4 }

这告诉我们四个文档匹配(因为我们使用空查询文档作为第一个参数),并且更新了四个文档。

现在让我们再次检查集合:

db.dogs.find()

结果:

{ “_id” : 1, “name” : “Wag”, “weight” : 20 } { “_id” : 2, “name” : “Bark”, “weight” : 10 } { “_id” : 6, “name” : “Fetch”, “weight” : 17 } { “_id” : 7, “name” : “Jake”, “weight” : 30 }

我们可以看到该字段已从每个文档中完全删除。type

请注意,表达式中的指定值(即 “”)不会影响操作。$unset

删除多个字段

您可以通过用逗号分隔来指定要删除的多个字段。

例:

db.dogs.updateMany(
   { },
   { $unset: { name: "", weight: "" } }
)

输出:

{ “acknowledged” : true, “matchedCount” : 4, “modifiedCount” : 4 }

检查集合:

db.dogs.find()

结果:

{ “_id” : 1 } { “_id” : 2 } { “_id” : 6 } { “_id” : 7 }

现在只剩下字段了。_id

嵌入式文档

您可以使用点表示法从嵌入文档中删除字段。

假设我们有一个调用的集合,其中包含以下文档:pets

{ “_id” : 1, “name” : “Wag”, “details” : { “type” : “Dog”, “weight” : 20, “awards” : { “Florida Dog Awards” : “Top Dog”, “New York Marathon” : “Fastest Dog”, “Sumo 2020” : “Biggest Dog” } } }

假设我们要从文档中删除该字段。awards

我们可以这样做:

db.pets.updateMany(
   { _id: 1 },
   { $unset: { "details.awards": "" } }
)

输出:

{ “acknowledged” : true, “matchedCount” : 1, “modifiedCount” : 1 }

现在让我们检查文档:

db.pets.findOne()

结果:

{ “_id” : 1, “name” : “Wag”, “details” : { “type” : “Dog”, “weight” : 20 } }

该字段及其值(本身是嵌入的文档)已从文档中删除。awards