MongoDB对数组进行增删改查操作
作者:水银H
与关系型数据库相比,MongoDB支持数组,将数组存储到文档之中,下面这篇文章主要给大家介绍了关于MongoDB对数组进行增删改查操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
前言
在使用mongo进行业务处理中,有时需要对文档(document)中的某个数组节点进行操作,这是下面要提到的 p u l l , pull, pull,push,$set操作。
mongoDB语法
设置一个类ExtendEntity
示例数据如下:
{ "extendId": "2022061500001", "taskId": "T0271001", "type": "1", "extendContents": [ { "extendCode": "EX1001", "extendName": "扩展1", "extendValue": "手机屏幕", "order": 1, "hasValue": true } ], "creator": "LiMing", "createTime": "2022-06-15 14:03:40", "editor": "LiMing", "editTime": "2022-06-15 14:03:40" }, { "extendId": "2022061500002", "taskId": "T0271001", "type": "1", "extendContents": [ { "extendCode": "EX1001", "extendName": "扩展1", "extendValue": "手机屏幕", "order": 1, "hasValue": true }, { "extendCode": "EX1002", "extendName": "扩展2", "extendValue": "电脑", "order": 2, "hasValue": true } ], "creator": "ZhangSan", "createTime": "2022-06-15 14:03:40", "editor": "LiMing", "editTime": "2022-06-15 14:03:40" }
修改数组节点–$set
参考: 进入官方$set文档
//将数组extendContents中extendCode为EX1002值更新 //$表示匹配到的第一个为EX1002的对象修改掉 //如果想匹配多个值,可修改为$[] db.ExtendEntity.update({"extendContents.extendCode":"EX1002"},{$set:{"extendContents.$.extendValue":"更新1002的值"}})
//也可以指定下标,从0开始,将数组extendContents第二个对象修改掉 db.ExtendEntity.update({"extendContents.extendCode":"EX1002"},{$set:{"extendContents.1.extendValue":"更新1002的值"}})
增加数组节点–$push
参考: 进入官方$push文档
//在数组extendContents中增加一个元素 db.ExtendEntity.update({"extendId": "2022061500002"},{$push:{"extendContents":{ "extendCode": "EX1003", "extendName": "扩展3", "extendValue": "电脑3", "order": 3, "hasValue": true }})
删除数组节点–$pull
参考: 进入官方$pull文档
需要该对象中每个属性值与mongodb数组中完全相同才能删除
//从数组extendContents中删除一个对象元素 { "extendCode": "EX1003","extendName": "扩展3","extendValue": "电脑3","order": 3,"hasValue": true} db.ExtendEntity.update({"extendId": "2022061500002"},{$pull:{"extendContents":{ "extendCode": "EX1003", "extendName": "扩展3", "extendValue": "电脑3", "order": 3, "hasValue": true }})
如果需要按数据中某个对象元素的某个属性删除
//删除数组extendContents中extendCode为EX1003的对象元素 db.ExtendEntity.update({"extendId": "2022061500002"},{$pull:{"extendContents":{"extendCode":"EX1003"}})
spring语法
当项目使用sping+mongodb时,spring为我们提供了相应的接口。使用org.springframework.data.mongodb.core.queryUpdate类中的set、push、pull方法。
修改数组节点–$set
Update update = new Update(); //修改元素 update.set("extendContents.$.extendValue","更新1002的值"); update.set("editTime",new Date()); //查询条件 Query query = new Query(Criteria.where("extendContents.extendCode").is("EX1002")); mongoTemplate.updateFirst(query, update, ExtendEntity.class);
增加数组节点–$push
// 字符串text的对象实体为ExtendContent String text = "{ \"extendCode\": \"EX1003\",\"extendName\": \"扩展3\",\"extendValue\": \"电脑3\",\"order\": 3,\"hasValue\": true}"; ExtendContent addExtend = JSONObject.parseObject(text, ExtendContent.class); Update update = new Update(); //添加元素 update.push("extendContents",addExtend); update.set("editTime",new Date()); //查询条件 Query query = new Query(Criteria.where("extendId").is("2022061500002")); mongoTemplate.updateFirst(query, update, ExtendEntity.class);
删除数组节点–$pull
Update update = new Update(); //删除元素,删除数组extendContents中extendCode=EX1003的对象元素 update.pull("extendContents", new BasicDBObject("extendCode","EX1003")); update.set("editTime",new Date()); //查询条件 Query query = new Query(Criteria.where("extendId").is("2022061500002")); mongoTemplate.updateFirst(query, update, ExtendEntity.class);
注: 以上示例均使用mongoTemplate.updateFirst,如需要处理多条数据,可使用mongoTemplate.updateMulti方法。
总结
到此这篇关于MongoDB对数组进行增删改查操作的文章就介绍到这了,更多相关MongoDB对数组增删改查内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!