1. 程式人生 > >mongodb java 刪除數組裡的某一個數據

mongodb java 刪除數組裡的某一個數據

最近專案裡有一個需求要刪除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程式碼中刪除陣列資料的方法,一是方便以後自己使用的時候檢視,如果你正好能幫助到你的話 點贊支援下吧