MongoDB如何移除数组中所有对象的指定属性?
解决MongoDB移除数组内所有对象指定属性的问题
你原来的写法无效,是因为"questions.explanation"只会匹配数组第一个元素的对应属性,无法作用于数组里的所有对象。要移除数组中所有对象的explanation属性,需要用到MongoDB 3.6及以上版本支持的数组全元素占位符$[],结合$unset操作符来实现,具体有两种写法:
方法一:使用updateMany(推荐)
updateMany会批量更新所有匹配的文档,语法如下:
db.collection.updateMany( {}, // 这里可以写查询条件,留空表示匹配所有文档 { $unset: { "questions.$[].explanation": "" } } )
方法二:使用update加multi参数
如果习惯用update,需要加上{ multi: true }参数才会更新所有匹配的文档:
db.collection.update( {}, { $unset: { "questions.$[].explanation": "" } }, { multi: true } )
额外补充:针对特定条件的数组元素移除属性
如果只需要移除数组中满足特定条件的对象的explanation属性,可以用数组过滤占位符,比如只移除text为"Q1"的对象的该属性:
db.collection.updateMany( {}, { $unset: { "questions.$[elem].explanation": "" } }, { arrayFilters: [{ "elem.text": "Q1" }] } )
内容的提问来源于stack exchange,提问作者Chique
相关产品推荐
相关产品推荐

