最近项目里有一个需求要删除mongodb 数组里的某一个数据,就面向百度编程了 mongo的命令找到了
下面具体讲下如何删除
删除mongo简单数组的数组 例子如下
例1 简单数组
{
"_id" : ObjectId("5b921e02d833f81e08fb674f"),
……
"code" : [
"6380500517",
"6380500518",
"6380500519"
]
}
查询命令如下
db.表明.find(
{'code':'6380500517'}
)
这样 你可以找到 code字段包含 6380500517的数据 ,但是怎么删除呢 mongo给我们提供了下面这个命令
db.表名.updateMany(
{'code':'6380500517'},
{'$pull': {'code':'6380500517'}}
)
这里的update有两个 一个是update,一个是上面的updateMany,update是删除符合条件的第一个,updateMany删除所有符合条件的数据,是指数组里所有符合条件的数据
update不删除 ,是通过下面的pull命令删除的
好,命令有了如何在java代码中实现呢,
maven中添加mongo的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
然后我们就可以使用mongodbTeplate 这个类了
修改我们可以使用mongodbTeplate这个类 查询的话可以使用spring封装的mongorepository
假使你的数组是如上简单的数组使用方法如下
Criteria condition = new Criteria();
condition.and("code").is(boxId);
Query mongoQuery = new Query(condition);
Update update = new Update();
update.pull("site_info",boxId);
mongoTemplate.updateMulti(mongoQuery, update, 实体类.class);
第一步创建查询条件,
实体类是对应你数据表的类,这样就对应了上面mongo的删除数组内某一个数据命令了
删除数组是多属性的例子
命令参考
假使你的数组内是下面这种
{
"_id" : ObjectId("56e2a92ccc6dd2271953e502"),
"links": [
{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
},
{
"name": "SoSo",
"url": "http://www.SoSo.com"
}
]
}
删除命令是
db.collection.update(
{ _id: ObjectId('id') },
{ $pull: { links: { name: 'Baidu' } } }
);
此时如果还用上面构建方法就不行了,虽然debug时输出的跟上面的命令看起来一样,但是在数据库中不会有任何效果
这里要多一步操作
Criteria condition = new Criteria();
condition.and("site_info.siteId").is(siteId);
Query mongoQuery = new Query(condition);
Update update = new Update();
Document doc = new Document();
doc.put("siteId",siteId);
update.pull("site_info",doc);
WriteResult writeResult = mongoTemplate.updateMulti(mongoQuery, update, RedpacketActivity.class);
上面例子是删除site_info下的siteId字段的某个值,就上面我写的mongo的数据来说 就是删除links下name的某一个数据
这里通过query对象查询,通过update方法更新删除
Criteria、query跟update都是下面这个包下的
org.springframework.data.mongodb.core.query
mongoTemplate这里用的是updateMulti这个方法,是删除所有符合条件的数据,还有一个updateFirst方法,是删除符合条件的第一个数据
好了,上面就是我总结的mongo在java代码中删除数组数据的方法,一是方便以后自己使用的时候查看,如果你正好能帮助到你的话 点赞支持下吧