MongoDB:如何用UpdateMany删除数组中指定条件的对象?
MongoDB批量删除数组中指定元素的解决方案
我的项目使用MongoDB作为数据库,现有products集合,数据结构如下:
products: [ { "name": "Product 1", "products": [ { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 13, "path": "" }, { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 11, "path": "" }, { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 10, "path": "" } ] }, { "name": "Product 2", "products": [ { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 10, "path": "" }, { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 11, "path": "" } ] } ]
需要删除集合中所有文档的products数组里id为10的对象,处理后的数据结构如下:
products: [ { "name": "Matériel crémation", "products": [ { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 13, "path": "" }, { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 11, "path": "" } ] }, { "name": "Documents", "products": [ { "file": "data:image/;base64,", "name": "Sacs bordeaux", "description": "Pour les crémations Référence", "id": 11, "path": "" } ] } ]
解决方法
使用updateMany结合$pull操作符就能实现需求,具体命令如下:
db.products.updateMany( {}, { $pull: { products: { id: 10 } } } )
命令说明
- 第一个参数
{}表示匹配集合中的所有文档,确保每个文档都被处理 $pull操作符的作用是从指定数组中移除满足条件的元素,这里指定删除products数组里id等于10的所有元素(如果数组中有多个id为10的元素,会一次性全部删除)
如果只需要处理单个文档,把updateMany换成updateOne即可,但这里需求是批量处理所有文档,所以updateMany是最优选择。
内容的提问来源于stack exchange,提问作者Vishalraj Jadeja
相关产品推荐
相关产品推荐

