博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb对数组元素及内嵌文档进行增删改查操作(转)
阅读量:6879 次
发布时间:2019-06-27

本文共 2465 字,大约阅读时间需要 8 分钟。

比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下:

{ "_id" : "195861", "tags" : [ { "tagId" : NumberLong(766), "optDate" : ISODate("2013-08-12T15:21:02.930Z"), "enable" : true }, { "tagId" : NumberLong(778), "optDate" : ISODate("2013-08-12T15:21:02.930Z"), "enable" : true } ]}

下面对这个文档中的tag进行增删该查操作,这里用到了spring mongodb 里面的MongoTemplate类。我这里把tags里的内嵌文档抽象成了Tag类。代码删除和修改本身就包含查询方法,所以没写查询方法

代码如下:

/** * * @author zhangdonghao * */@Component("UserrTagServiceImpl")public class UserrTagServiceImpl implements UserrTagService {/** * Mongo DB Spring Template */@Resourceprotected MongoTemplate mongoTemplate = null;public UserrTagServiceImpl() {}/****给tags数组添加一个元素*/@Override public Response
addTag(String id, Long tagId) { try { Tag tag = new Tag(tagId); tag.setOptDate(new Date()); tag.setEnable(true); Query query = Query.query(Criteria.where("_id").is(id)); Update update = new Update(); update.addToSet("tags", tag); mongoTemplate.upsert(query, update, User.class); } catch (Exception e) { return new Response
(0); } return new Response
(1);}/****修改tags数组中内嵌文档指定一个元素的值*/@Override public Response
disableTag(String id, Long tagId) { try { Query query = Query.query(Criteria.where("_id").is(id) .and("tags.tagId").is(tagId)); Update update = new Update(); update.set("tags.$.enable", false); mongoTemplate.updateFirst(query, update, User.class); } catch (Exception e) { return new Response
(0); } return new Response
(1);}/****删除tags数组中指定的内嵌文档*/@Override public Response
removeTag(String id, Long tagId) { try { Query query = Query.query(Criteria.where("_id").is(id) .and("tags.tagId").is(tagId)); Update update = new Update(); update.unset("tags.$"); mongoTemplate.updateFirst(query, update, User.class); } catch (Exception e) { return new Response
(0); } return new Response
(1);}public MongoTemplate getMongoTemplate() { return mongoTemplate;}public void setMongoTemplate(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate;}}
本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/7182215.html,如需转载请自行联系原作者

你可能感兴趣的文章
替代jquery1.9版本以前的toggle事件函数(开关)
查看>>
对Castle Windsor的Resolve方法的解析时new对象的探讨
查看>>
【转】ElasticSearch之定时删除数据
查看>>
golang前后端jwt对接
查看>>
【Java-数据结构】
查看>>
五分钟读懂UML类图(转)
查看>>
Centos7 安装Python3.6.4
查看>>
杀人游戏系列 之三 提供游戏代码下载
查看>>
[转载]Java抽象类和接口的学习
查看>>
纯真IP数据库查询(C#源代码)
查看>>
举重比赛中重量计算
查看>>
maven编译参数
查看>>
WebKit结构
查看>>
MyEclipse Java Build Path详解
查看>>
Could not find modernizr-2.6.2 in any of the sources
查看>>
mysql中select distinct的使用方法
查看>>
修改su密码 macbook
查看>>
SMTP退信时常用信息说明
查看>>
潜移默化学会WPF(样式篇)---改造CheckBox,全新metro风格
查看>>
菜菜从零学习WCF七(消息协定)
查看>>