[英]How to delete object from list in JSON using SpringBoot and MongoDB
In my project, I am using Spring Boot and MongoDB.在我的项目中,我使用的是 Spring Boot 和 MongoDB。
I would like to remove object from list in JSON by objectId
:我想通过
objectId
从 JSON 的列表中删除 object :
I have a profile object in the database that looks like this:我在数据库中有一个配置文件 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"
}
]
}
I would like to remove object
by its ID
in list runningStyle
in Profile object.我想通过配置文件 object 中的列表
runningStyle
中的ID
删除object
。
This is what I have tried in code:这是我在代码中尝试过的:
RunningController.java运行控制器.java
@DeleteMapping(value = "/delete/{runningStyleId}")
public void deleteRunningStyle(@PathVariable String runningStyleId){
playingStyleService.deletePlayingStyle(playingStyleId);
}
RunningServiceImpl.java 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);
}));
}
With this code, I don't have any error, but object is not deleted from list in my Profile.使用此代码,我没有任何错误,但 object 并未从我的个人资料列表中删除。
I have also tried by adding something like this in repository:我还尝试在存储库中添加类似这样的内容:
@Query(value = "{ '_id' : { '$oid' : ?0}}", delete = true)
void deleteRunningStyleById(String runningStyleId);
But it is not deleting it.但它并没有删除它。
What am I doing wrong?我究竟做错了什么? What is the best way to achieve this?
实现这一目标的最佳方法是什么?
UPDATE更新
I have added:我已经添加了:
@Query(value = "{'$pull': {'runningStyle':{'_id' : ?0 }}}", delete = true)
void deleteRunningStyleById(String runningStyleId);
But I am getting following error:但我收到以下错误:
unknown top level operator: $pull. If you have a field name that starts with a '$' symbol, consider using $getField or $setField.
@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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.