MongoDB内嵌数组文档,怎么只针对数组里的数据做增删改查

MongoDB内嵌数组文档,怎么只针对数组里的数据做增删改查,第1张

有一个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命令怎么将数据插入到数组的指定位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9310552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存