热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库中对数组元素及内嵌文档进行增删改查等操作

比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下:{_id:195861,tags:[{tagId:NumberLong(766),optDate:ISODate(2013-08-12T15:21:02.930Z),enable:true},{tagId:Num

比如我有一个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 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;
}
}


推荐阅读
author-avatar
书友63901698
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有