zoukankan      html  css  js  c++  java
  • mongodb对数组元素及内嵌文档进行增删改查操作(转)

    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;
    }
    }
    
  • 相关阅读:
    javaweb常识
    分页功能的实现
    登录按钮的美化
    如何将数据库中的值经过servlet传入到jsp页面,并且用EL表达式显示出值
    获取当前系统时间添加到对象中
    导航栏/菜单栏的设置
    验证码的设计与记住我存储用户名密码cookie的技术及单选按钮选择登录人身份的实现
    div悬浮窗口设计来完成注册页面
    jdbc封装的类
    ajax验证用户名是否存在
  • 原文地址:https://www.cnblogs.com/94cool/p/7182215.html
Copyright © 2011-2022 走看看