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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

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



本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/7182215.html,如需转载请自行联系原作者

相关文章
|
6月前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章评论的基本增删改查
本节介绍了文章评论的基本增删改查功能实现。首先,在`cn.itcast.article.dao`包下创建数据访问接口`CommentRepository`,继承`MongoRepository`以支持MongoDB操作。接着,在`cn.itcast.article.service`包下创建业务逻辑类`CommentService`,通过注入`CommentRepository`实现保存、更新、删除及查询评论的功能。最后,新建Junit测试类`CommentServiceTest`,对保存和查询功能进行测试,并展示测试结果截图,验证功能的正确性。
111 2
|
6月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` &gt; `skip()` &gt; `limit()`。
250 1
|
6月前
|
JSON NoSQL MongoDB
微服务——MongoDB常用命令——文档基本CRUD
本文介绍了MongoDB中文档的基本操作,包括插入、查询、更新和删除。单个文档插入使用`insert()`或`save()`方法,批量插入用`insertMany()`。查询所有文档用`find()`,条件查询可在`find()`中添加参数,投影查询控制返回字段。更新文档通过`update()`实现,支持覆盖修改、局部修改(使用`$set`)和批量修改。列值增长可用`$inc`实现。删除文档用`remove()`,需谨慎操作以免误删数据。此外,文档键值对有序,区分大小写,不能有重复键。
131 1
|
11月前
|
NoSQL MongoDB 数据库
MongoDB 更新文档
10月更文挑战第14天
239 2
|
8月前
|
存储 监控 NoSQL
【赵渝强老师】MongoDB文档级别的并发控制
MongoDB使用WiredTiger存储引擎在文档级别进行并发控制,允许多个写操作同时修改不同文档,但对同一文档的修改需序列化执行。引擎采用乐观锁和意向锁机制处理冲突。通过视频讲解、插入大量文档示例及使用`mongotop`和`db.serverStatus()`命令,演示了如何监控MongoDB的锁信息和读写统计,展示了数据库和集合级别的写锁情况。
234 29
|
11月前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
328 1
|
11月前
|
NoSQL MongoDB
MongoDB 删除文档
10月更文挑战第15天
220 0
|
11月前
|
存储 JSON NoSQL
MongoDB 插入文档
10月更文挑战第14天
423 0
|
2月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
2月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
273 79

推荐镜像

更多