首页 > 代码库 > mongodb对数组元素及内嵌文档进行增删改查操作(转)

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 */@Resourceprotected MongoTemplate mongoTemplate = null;public UserrTagServiceImpl() {}/****给tags数组添加一个元素*/@Overridepublic 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数组中内嵌文档指定一个元素的值*/@Overridepublic 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数组中指定的内嵌文档*/@Overridepublic 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;}}

 

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