mongodb java 删除数组里的某一个数据

6 篇文章 0 订阅

最近项目里有一个需求要删除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的删除数组内某一个数据命令了

删除数组是多属性的例子

命令参考 https://blog.csdn.net/mitkey/article/details/50896944
假使你的数组内是下面这种

{
    "_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代码中删除数组数据的方法,一是方便以后自己使用的时候查看,如果你正好能帮助到你的话 点赞支持下吧

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值