比如我有一个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 */@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;}}原文地址:https://www.linuxidc.com/Linux/2013-11/92408.htm