Java Spring Data MongoOperations:无法使用pull方法删除数组中的子文档
以下是我的MongoDB文档的结构Java Spring Data MongoOperations:无法使用pull方法删除数组中的子文档,java,spring,mongodb,spring-boot,spring-data-mongodb,Java,Spring,Mongodb,Spring Boot,Spring Data Mongodb,以下是我的MongoDB文档的结构userActivity { "_id" : ObjectId("5e49569f93e956eeb28eb8a6"), "userId" : "123", "likes" : { "videos" : [ { "_id" : "abc", "title" : "This video is part of test setup", }
userActivity
{
"_id" : ObjectId("5e49569f93e956eeb28eb8a6"),
"userId" : "123",
"likes" : {
"videos" : [
{
"_id" : "abc",
"title" : "This video is part of test setup",
}
]
}
}
我正在使用Spring数据MongoOperations
来操作MongoDB集合。下面是从likes
子文档中的videos
数组中删除视频的代码。我已尝试根据用户的用户ID
首先筛选文档。然后根据videoId
将过滤器应用于update
功能
public UpdateResult removeVideoLike(String videoId, String userId) {
Query queryUser = Query.query( Criteria.where("userId").is(userId) );
Query queryVideo = Query.query( Criteria.where("id").is(videoId) );
Update update = new Update().pull("likes.videos", queryVideo );
return mongoOperations.updateFirst( queryUser , update, UserActivity.class );
}
运行时不会出现错误,但不会删除条目。UpdateResult
具有以下值
matchedCount=1
modifiedCount=0
upsertedId=null
我很困惑,如果它能够匹配数组中的条目,为什么它不删除它?我缺少什么?您使用的是哪个版本的spring data mongodb?我在当前主机上试用过,一切正常。@christofstrobl我使用的是
spring-data-mongodb-2.2.1.版本
。所以我发布的代码在你这方面起作用了吗?我使用的是当前的3.0快照,并尝试了2.2.x,两者都起作用了。您是否可以检查查询服务器
是否返回多个结果?在这种情况下,updateFirst
使用第一个来执行更新,如果喜欢。videos
已经为空,modifiedCount
设置为零,因为没有任何更改。@ChristophStrobl集合中只有一个文档。你能分享你的代码吗?比较它们可能会有所帮助。问题是你没有使用正确的字段名。语句Criteria.where(“id”)是(videoId)
应该是Criteria.where(“id”)是(videoId)
。