from:https://my.oschina.net/132722/blog/168274

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

<!-- lang: js -->
{"_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类。代码删除和修改本身就包含查询方法,所以没写查询方法

代码如下:

<!-- lang: java -->
/*** * @author zhangdonghao* */
@Component("UserrTagServiceImpl")
public class UserrTagServiceImpl implements UserrTagService {/*** Mongo DB Spring Template*/
@Resource
protected MongoTemplate mongoTemplate = null;public UserrTagServiceImpl() {}
/**
**给tags数组添加一个元素
*/
@Override
public Response<Integer> 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<Integer>(0);}return new Response<Integer>(1);
}/**
**修改tags数组中内嵌文档指定一个元素的值
*/
@Override
public Response<Integer> 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<Integer>(0);}return new Response<Integer>(1);
}
/**
**删除tags数组中指定的内嵌文档
*/
@Override
public Response<Integer> 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<Integer>(0);}return new Response<Integer>(1);
}public MongoTemplate getMongoTemplate() {return mongoTemplate;
}public void setMongoTemplate(MongoTemplate mongoTemplate) {this.mongoTemplate = mongoTemplate;
}
}

转载于:https://www.cnblogs.com/94cool/p/7182215.html

mongodb对数组元素及内嵌文档进行增删改查操作(转)相关推荐

  1. java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码

    本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; ...

  2. 1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充

    文档操作 一.查 1.比较运算 # SQL:=,!=,>,<,>=,<= # MongoDB:{key:value}代表什么等于什么,"$ne"," ...

  3. [MongoDB] MongoDB的基本操作以及文档的增删改查

    参考视频 链接:https://pan.baidu.com/s/1tAWPEC8yppyrPupkUFdCWQ 提取码:gdn8 MongoDB的基本操作 基本概念 生活中:仓库.架子.物品 计算机: ...

  4. 分布式搜索elasticsearch 索引文档的增删改查 入门

    分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...

  5. 学生的新增mySQL文档_MySQL增删改查

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

  6. es内嵌文档查询_ElasticSearch 文档的增删改查都不会?

    本文主要是介绍 ElasticSearch 的文档增删改查和批量操作,同时会介绍一些 REST API 返回状态码的具体含义. 我们先来看下这个表: 这个表包含了 Index.Create.Read. ...

  7. MongoDB快速上手、windows安装、常用命令、文档基本增删改查、mongoDB的索引

    MongoDB快速上手 目标 理解MongoDB的业务场景.熟悉MongoDB的简介.特点和体系结构.数据类型等. 能够在Windows和Linux下安装和启动MongoDB.图形化管理界面Compa ...

  8. 【elasticsearch】文档 CRUD 增删改查 以及 相关 参数

    1.概述 转载:https://mp.weixin.qq.com/s/aOZnZpAC4c_dYkVW8DfNPg 在Elasticsearch中,文档(document)是所有可搜索数据的最小单位. ...

  9. ElasticSearch~ES文档操作~对文档的增删改查

    一.新增文档 一.指定文档ID:手动指定ID POST可以不指定ID,会自动生成ID POST /teacher/_doc/1001 {"name":"李四", ...

最新文章

  1. Jquery中使用Validate插件使表单验证更加简单
  2. 实现 ASP.NET WebForm Client
  3. 关于Exchang server 2010 MCITP
  4. java 计算小费_java-以某些形状显示数字
  5. 前端学习(3140):react-hello-react之setstate属性
  6. Spring Boot整合Swagger3的分组问题
  7. java 表单验证必填的_avalon2 非必填项的表单验证规则
  8. RESTful 接口设计规范
  9. html中blockquote标签,html中blockquote标签的使用方法
  10. 【文章】《陋室铭》《陋妻铭》《微信铭》《交友铭》《老人铭》
  11. HTML+CSS 学习笔记
  12. 【知识】SpringBoot项目结构目录
  13. 积化和差、和差化积公式及记忆
  14. Brainfuck语言入门
  15. Mac系统如何运行Windows exe程序?mac打开exe文件方法教程
  16. OpenGL + Win32 SDK 开发框架的搭建(C语言版)
  17. 血管内冲击波:冠状动脉钙化处理的技术革新
  18. 技术从业者的未来(三)
  19. Dubbo——Merger的实现
  20. 【Unity-UGUI控件全面解析】| Dropdown 下拉菜单组件详解

热门文章

  1. 消费者服务消费延时分析
  2. Mac osx 下配置ANT
  3. WebApp 开发中常用的代码片段
  4. 早上发现还是问题不断
  5. Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建
  6. VUE自学日志05-计算属性和侦听器
  7. Docker基本命令入门
  8. spring——autowire自动注入
  9. linux系统软件包依赖关系,Ubuntu解决包依赖关系
  10. git serialtool_Git学习笔记---协作的一般流程