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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于MongoDB对数组元素及内嵌文档进行增删改查操作的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 数组元素增删改

mongodb增删改查 及批量操作

mongodb 集合操作 (增删改查)

MongoDB简介与增删改查

DOM操作增删改查

MongoDB增删改查操作