有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下:
<!-- lang: js -->
{
"_id" : "195861",
"tags" : [
{
"tagId" : NumberLong(766),
"optDate" : ISODate("2013-08-12T15:21:02930Z"),
"enable" : true
},
{
"tagId" : NumberLong(778),
"optDate" : ISODate("2013-08-12T15:21:02930Z"),
"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);
tagsetOptDate(new Date());
tagsetEnable(true);
Query query = Queryquery(Criteriawhere("_id")is(id));
Update update = new Update();
updateaddToSet("tags", tag);
mongoTemplateupsert(query, update, Userclass);
} 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 = Queryquery(Criteriawhere("_id")is(id)
and("tagstagId")is(tagId));
Update update = new Update();
updateset("tags$enable", false);
mongoTemplateupdateFirst(query, update, Userclass);
} 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 = Queryquery(Criteriawhere("_id")is(id)
and("tagstagId")is(tagId));
Update update = new Update();
updateunset("tags$");
mongoTemplateupdateFirst(query, update, Userclass);
} catch (Exception e) {
return new Response<Integer>(0);
}
return new Response<Integer>(1);
}
public MongoTemplate getMongoTemplate() {
return mongoTemplate;
}
public void setMongoTemplate(MongoTemplate mongoTemplate) {
thismongoTemplate = mongoTemplate;
}
}
你不能直接存储一个类的实例啊,mongodb用bson存储数据,bson是json的binary形式,所以你只能存储javascript的基本类型、Object和Array这些东西。像beautiful soup里面的类的实例,你可以存储关键的数据,到你再需要用的时候,取出数据再构造一个新实例,而不是把这个实例存入数据库。
没有这种 *** 作,因为MongoDB的底层就不支持这种 *** 作。 从MongoDB的oplog模式中可以看出,MongoDB的每次op都是独立执行的最小单元,因此,不会存在多个op组合成一个执行的情况。因此在各种API中都不会存在这种批量插入的 *** 作。 另外在这里根据个人
以上就是关于MongoDB内嵌数组文档,怎么只针对数组里的数据做增删改查全部的内容,包括:MongoDB内嵌数组文档,怎么只针对数组里的数据做增删改查、python写了一个爬虫,内容储存到mongodb数据库,遇到一个错误不知怎么改,求大神帮忙、使用mongodb命令怎么将数据插入到数组的指定位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)