当前位置:Gxlcms > mysql > MongoDB对数组元素及内嵌文档进行增删改查操作

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

时间:2021-07-01 10:21:17 帮助过:14人阅读

下面对这个文档中的tag进行增删该查操作,这里用到了spring mongodb 里面的MongoTemplate类。我这里把tags里的内嵌文档抽象成了T

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

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

推荐阅读:

Java实现MongoDB中自增长字段

CentOS编译安装MongoDB

CentOS 编译安装 MongoDB与mongoDB的php扩展

CentOS 6 使用 yum 安装MongoDB及服务器端配置

Ubuntu 13.04下安装MongoDB2.4.3

如何在MongoDB中建立新数据库和集合

MongoDB入门必读(概念与实战并重)

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

linux

人气教程排行