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