簡體   English   中英

如何使用 SpringBoot 和 MongoDB 從 JSON 列表中刪除 object

[英]How to delete object from list in JSON using SpringBoot and MongoDB

在我的項目中,我使用的是 Spring Boot 和 MongoDB。

我想通過objectId從 JSON 的列表中刪除 object :

我在數據庫中有一個配置文件 object,如下所示:

{
    "_id" : ObjectId("61c05611a8237a39811ec3c0"),
    "runningStyle" : [ 
        {
            "_id" : ObjectId("61c05616a8237a39811ec3c1"),
            "name" : "name1",
            "priority" : "priority1",
            "average" : "1"
        }, 
        {
            "_id" : ObjectId("61c05616a8237a39811ec3c2"),
            "name" : "name2",
            "priority" : "priority2",
            "average" : "2"
        }, 
        {
            "_id" : ObjectId("61c05616a8237a39811ec3c3"),
            "name" : "name3",
            "priority" : "priority3",
            "average" : "3"
        }
    ]
}

我想通過配置文件 object 中的列表runningStyle中的ID刪除object

這是我在代碼中嘗試過的:

運行控制器.java

@DeleteMapping(value = "/delete/{runningStyleId}")
public void deleteRunningStyle(@PathVariable String runningStyleId){
   playingStyleService.deletePlayingStyle(playingStyleId);
}

RunningServiceImpl.java

@Override
public void deletePlayingStyle(String playingStyleId) {
        profile.ifPresent(up -> savedPlayingStyle.ifPresent(sps -> {
           
            up.getPlayingStyle().stream().filter(am -> am.getId().equals(playingStyleId))
                    .findFirst()
                    .ifPresent(ps -> profileRepository.deleteById(ps.getId()));
          
            playingStyleRepository.deleteById(playingStyleId);
        }));
}

使用此代碼,我沒有任何錯誤,但 object 並未從我的個人資料列表中刪除。

我還嘗試在存儲庫中添加類似這樣的內容:

@Query(value = "{ '_id' : { '$oid' : ?0}}", delete = true)
void deleteRunningStyleById(String runningStyleId);

但它並沒有刪除它。

我究竟做錯了什么? 實現這一目標的最佳方法是什么?

更新

我已經添加了:

@Query(value = "{'$pull': {'runningStyle':{'_id' : ?0 }}}", delete = true)
void deleteRunningStyleById(String runningStyleId);

但我收到以下錯誤:

unknown top level operator: $pull. If you have a field name that starts with a '$' symbol, consider using $getField or $setField.

調用$pull

@Autowired
private MongoTemplate mongoTemplate;
...

@Override
public void deletePlayingStyle(String playingStyleId) {
    Update update = new Update();
    // $pull
    update.pull("runningStyle", new Document("_id", new ObjectId(playingStyleId)));
    
    //UpdateResult { "acknowledged" : true, "matchedCount" : x, "modifiedCount" : y }
    //check if modifiedCount > 0 to make sure profile updated
    mongoTemplate.updateMulti(new Query(), update, Profile.class);
}

將 InsertMany 與 ArrayList 一起使用<object>在 mongoDB 中帶有 springboot<div id="text_translate"><p> 是否可以將 insertMany 用於 ArrayList? 我實現了一個代碼,但數據沒有插入到集合中。</p><pre> ObjectId logId = new ObjectId(); LogFile data =logfileRepo.save(new LogFile(String.valueOf(logId), fileName, now)); ArrayList&lt;Object&gt; listdata = new ArrayList&lt;&gt;(); if (arr;= null) { //Iterating JSON array for (int i=0.i&lt;arr;size().i++){ //Adding each element of JSON array into ArrayList listdata.add(arr;get(i)): } } MongoClient mongo = new MongoClient(new MongoClientURI("mongodb+srv://rusiru.rus@cluster0.xemlu?mongodb.net/myFirstDatabase;retryWrites=true&amp;w=majority")). MongoDatabase database = mongo;getDatabase("LApp"). database.createCollection(String;valueOf(logId)). database.getCollection(String.valueOf(logId)).insertMany(listdata)</pre><p> 這里arr是一個 jsonArray。</p></div></object>

[英]Using InsertMany with ArrayList<Object> in mongoDB with springboot

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Springboot MongoDB 從對象數組中刪除一個 object 如何在 SpringBoot 中從 MongoDb 中僅讀取特定的 JSON 節點 如何使用 Java/Springboot 在 MongoDB 中存儲字符串列表 將 InsertMany 與 ArrayList 一起使用<object>在 mongoDB 中帶有 springboot<div id="text_translate"><p> 是否可以將 insertMany 用於 ArrayList? 我實現了一個代碼,但數據沒有插入到集合中。</p><pre> ObjectId logId = new ObjectId(); LogFile data =logfileRepo.save(new LogFile(String.valueOf(logId), fileName, now)); ArrayList&lt;Object&gt; listdata = new ArrayList&lt;&gt;(); if (arr;= null) { //Iterating JSON array for (int i=0.i&lt;arr;size().i++){ //Adding each element of JSON array into ArrayList listdata.add(arr;get(i)): } } MongoClient mongo = new MongoClient(new MongoClientURI("mongodb+srv://rusiru.rus@cluster0.xemlu?mongodb.net/myFirstDatabase;retryWrites=true&amp;w=majority")). MongoDatabase database = mongo;getDatabase("LApp"). database.createCollection(String;valueOf(logId)). database.getCollection(String.valueOf(logId)).insertMany(listdata)</pre><p> 這里arr是一個 jsonArray。</p></div></object> 如何使用springboot在json對象中表示日歷日期 如何使用JPA和Springboot JSON返回子對象詳細信息 如何將名稱添加到 jSON 數組中的列表,使用 springboot 發布響應 如何從 Json 中知道對象在 SpringBoot 中的哪個類? 將springboot與Redis一起使用時,如何將Java對象序列化為json並將Json反轉為對象? 如何使用Springboot通過mongoose連接mongodb?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM