MongoDB对数组进行增删改查操作

 更新时间:2023年05月25日 14:16:28   作者:水银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对数组增删改查内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MongoDB数据备份迁移的全过程

    MongoDB数据备份迁移的全过程

    这篇文章主要记录了MongoDB数据备份迁移的全过程,文中通过图文结合的方式介绍的非常详细,对大家了解学习MongoDB数据备份迁移有一定的帮助,需要的朋友可以参考下
    2024-06-06
  • 为MongoDB数据库注册windows服务

    为MongoDB数据库注册windows服务

    这篇文章介绍了为MongoDB数据库注册windows服务的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • MongoDB 聚合查询详解

    MongoDB 聚合查询详解

    这篇文章主要介绍了MongoDB 聚合查询详解的相关资料,需要的朋友可以参考下
    2022-12-12
  • Mongodb亿级数据性能测试和压测

    Mongodb亿级数据性能测试和压测

    MongoDB是一个开源的、基于分布式文件存储的NoSQL数据库系统,它使用文档存储方式,数据结构由键值(key-value)对组成,本文给大家介绍了Mongodb亿级数据性能测试和压测,需要的朋友可以参考下
    2024-06-06
  • mongodb设置后台运行的方法

    mongodb设置后台运行的方法

    这篇文章主要介绍了mongodb设置后台运行的方法,本文同时给出了关闭已在后台运行mongodb的方法,需要的朋友可以参考下
    2014-09-09
  • Mongodb 崩溃报错 Too many open files的问题解析

    Mongodb 崩溃报错 Too many open files的问题解析

    这篇文章主要介绍了Mongodb 崩溃报错 Too many open files的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MongoDB操作之日期转换方式(string、ISODate、时间戳)

    MongoDB操作之日期转换方式(string、ISODate、时间戳)

    这篇文章主要介绍了MongoDB操作之日期转换方式(string、ISODate、时间戳),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Mongodb多键索引中索引边界的混合问题小结

    Mongodb多键索引中索引边界的混合问题小结

    Mongodb为提高数组的查询效率,针对数组构建了多键索引,而Mongodb在应用多键数组查询时,也通过构建,减少数组查询的数值范围,来提高查询性能,本文结合Mongodb官方文档,阐述Mongodb在使用多键索引时的边界优化,感兴趣的朋友一起看看吧
    2024-07-07
  • MongoDB aggregate 运用篇个人总结

    MongoDB aggregate 运用篇个人总结

    最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得
    2016-11-11
  • 基于Mongodb分布式锁解决定时任务并发执行问题

    基于Mongodb分布式锁解决定时任务并发执行问题

    这篇文章主要介绍了基于Mongodb分布式锁解决定时任务并发执行问题,网上有很多分布式锁的实现方案,基于redis、zk、等有很多,但是我的就是一个用了mysql和mongo的小应用,本文给大家详细讲解,需要的朋友可以参考下
    2023-04-04

最新评论