如何从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