当前位置: 代码网 > it编程>数据库>Nosql > MongoDB对数组进行增删改查操作

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

2024年05月18日 Nosql 我要评论
前言在使用mongo进行业务处理中,有时需要对文档(document)中的某个数组节点进行操作,这是下面要提到的 p u l l , pull, pull,push,$set操作。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对数组增删改查内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com