最近项目里有一个需求要删除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);

第一步创建查询条件,

mongodb数组size mongodb数组删除单个元素_mongodb数组size


实体类是对应你数据表的类,这样就对应了上面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);

mongodb数组size mongodb数组删除单个元素_mongodb数组size_02


上面例子是删除site_info下的siteId字段的某个值,就上面我写的mongo的数据来说 就是删除links下name的某一个数据

这里通过query对象查询,通过update方法更新删除

Criteria、query跟update都是下面这个包下的

org.springframework.data.mongodb.core.query

mongoTemplate这里用的是updateMulti这个方法,是删除所有符合条件的数据,还有一个updateFirst方法,是删除符合条件的第一个数据

好了,上面就是我总结的mongo在java代码中删除数组数据的方法,一是方便以后自己使用的时候查看,如果你正好能帮助到你的话 点赞支持下吧