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

    比如我有一个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
     */
    @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.linuxidc.com/Linux/2013-11/92408.htm

  • 相关阅读:
    Largest Rectangle in Histogram
    Valid Sudoku
    Set Matrix Zeroes
    Unique Paths
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Path Sum II
    Path Sum
    Validate Binary Search Tree
    新手程序员 e
  • 原文地址:https://www.cnblogs.com/sank/p/11371588.html
Copyright © 2011-2022 走看看