接口IMongDaoUpdate:

package com.net.test.mongdb.dao;

import com.net.test.mongdb.entity.User;

public interface IMongDaoUpdate {

    public void updateUser(User user);

    public void updateUserHobby(User user);

    public void updateUserHobbyDiffer(User user);

    public void updateUserUserPsg(User user);

    public void deleteUserUserPsg(String name,String field);
}

实现类:

package com.net.test.mongdb.dao.imp;

import javax.annotation.Resource;

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository; import com.net.test.mongdb.dao.IMongDaoUpdate;
import com.net.test.mongdb.entity.User; /**
* @author ***
* @Time:2017年8月4日 下午1:50:16
* @version 1.0
* Function: TODO
*/
@Repository
public class MongDaoUpdateImp implements IMongDaoUpdate { @Resource
protected MongoTemplate mongoTemplate; /**
* @description 单条更新user信息
* @param user
*/
@Override
public void updateUser(User user)
{
Query query = Query.query(Criteria.where("name").is(user.getName()));
Update up = new Update();
up.set("sex", user.getSex()).inc("age", user.getAge()).set("hobby", user.getHobby()); mongoTemplate.updateFirst(query, up, User.class);
} /**
* @description 单独对user信息的某个特定数组字段继续追加数据,不管是否重复
* @param user
*/
@Override
public void updateUserHobby(User user)
{
Query query = Query.query(Criteria.where("name").is(user.getName()));
Update up = new Update();
String[] str = new String[user.getHobby().size()];
for(int i = 0 ; i < user.getHobby().size();i++)
{
str[i] = user.getHobby().get(i).toString();
}
up.pushAll("hobby", str);
mongoTemplate.updateFirst(query, up, User.class);
} /**
* @description 一次性追加多个不重复的数组元素
* @param user
*/
@Override
public void updateUserHobbyDiffer(User user)
{
Query query = Query.query(Criteria.where("name").is(user.getName())); Update up = new Update();
Object[] str = new Object[user.getHobby().size()];
for(int i = 0 ; i < user.getHobby().size();i++)
{
str[i] = user.getHobby().get(i).toString();
}
up.addToSet("hobby").each(str);
mongoTemplate.updateFirst(query, up, User.class);
} /**
* @description 更新内置对象
* @param user
*/
@Override
public void updateUserUserPsg(User user)
{
Query query = Query.query(Criteria.where("name").is(user.getName()));
Update update = new Update();
update.set("psg.address", user.getPsg().getAddress());
update.set("psg.phone", user.getPsg().getPhone());
update.set("psg.county", "江苏"); mongoTemplate.updateFirst(query, update, User.class);
} /**
* @description 删除内置对象的某个字段
* @param name
* @param field
*/
@Override
public void deleteUserUserPsg(String name, String field)
{
Query query = Query.query(Criteria.where("name").is(name));
Update update = new Update();
update.unset("psg.county");
mongoTemplate.updateFirst(query, update, User.class); } }

MongDB之各种修改操作的更多相关文章

  1. 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理

    SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为 ...

  2. 采用DOM进行表格的修改操作

    2015-08-31 <html> <head> <title>采用DOM进行表格的修改操作</title> <script language=& ...

  3. uoj #58. 【WC2013】糖果公园(树上莫队算法+修改操作)

    [题目链接] http://uoj.ac/problem/58 [题意] 有一棵树,结点有自己的颜色,若干询问:u,v路径上的获益,并提供修改颜色的操作. 其中获益定义为Vc*W1+Vc*W2+…+V ...

  4. 基于jsp+servlet图书管理系统之后台用户信息修改操作

    上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/de ...

  5. SpringDataJpa的批量 保存 修改 操作

    SpringDataJpa进行修改数据库操作有两种方式: 一.调用保存实体的方法 1.保存一个实体:repository.save(T entity) 2.保存多个实体:repository.save ...

  6. mysql常用快速查询修改操作

    mysql常用快速查询修改操作 一.查找并修改非innodb引擎为innodb引擎 # 通用操作 mysql> select concat('alter table ',table_schema ...

  7. java对excel文件内容读写修改操作

    Read.java package domain; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cel ...

  8. Java读取json文件并对json数据进行读取、添加、删除与修改操作

    转载:http://blog.csdn.net/qing_yun/article/details/46865863#t0   1.介绍 开发过程中经常会遇到json数据的处理,而单独对json数据进行 ...

  9. mybatis框架入门程序:演示通过mybatis实现数据库的修改操作

    1.mybatis的基本配置工作可以在我的这篇博客中查看:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2.修改用户的配置文件: <upd ...

随机推荐

  1. Java面向对象_内部类

    概念:内部类就是类的内部定义的类 成员内部类格式如下:class Outer{ class Inner{} } 编译上述代码会产生两个文件:Outer.class和Outer$Inner.class ...

  2. Spark编程环境搭建及WordCount实例

    基于Intellij IDEA搭建Spark开发环境搭建 基于Intellij IDEA搭建Spark开发环境搭——参考文档 ● 参考文档http://spark.apache.org/docs/la ...

  3. 【Linux】linux下vi命令大全

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...

  4. 使用CMake生成VS2010项目查看OpenCV源代码

    近期项目需要用到OpenCV中的几个函数,但其函数无法全部实现自己需要的功能,故而需要改进部分函数,为安全及效率起见,想参考OpenCV的源码来改进,这样节省时间的同时亦可提供代码的鲁棒性和通用性.那 ...

  5. Cocos2d-x v3.1 核心类Director,Scene,Layer和Sprite(六)

    Cocos2d-x v3.1 核心类Director,Scene,Layer和Sprite(六) Scene就像一个舞台一样在上面会摆放各种的元素,有的是固定的比如说布景,道具都是固定不动的,但有的元 ...

  6. genlist -s 192.168.21.\*

    显示网段192.168.21中可用的主机.

  7. FPGA工具篇——编辑器Notepad++

    body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLi ...

  8. 在vue-cli中使用路由

    1.首先npm中是否有vue-router 一般在vue-cli的时候就已经下载好了依赖包了 2.使用vue的话正常的需要涉及这几个文件 demo/src/router/index.js import ...

  9. 关于ffmpeg(libav)解码视频最后丢帧的问题

    其实最初不是为了解决这个问题而来的,是Peter兄给我的提示解决另一个问题却让我误打误撞解决了另外一个问题之后也把这个隐藏了很久的bug找到(之前总是有一些特别短的视频产生不知所措还以为是视频素材本身 ...

  10. Linux基础精华(转)

    Linux基础精华 (继续跟新中...) 常用命令: Linux shell 环境 让你提升命令行效 率的 Bash 快捷键 [完整版] 设置你自己的liux alias Linux的Find使用 L ...