Ниже приведена структура моего документа MongoDB userActivity
.
{
"_id" : ObjectId("5e49569f93e956eeb28eb8a6"),
"userId" : "123",
"likes" : {
"videos" : [
{
"_id" : "abc",
"title" : "This video is part of test setup",
}
]
}
}
Я использую Spring Data MongoOperations
для управления коллекциями MongoDB. Ниже приведен код для удаления видео из массива videos
в поддокументе likes
. Я попытался сначала отфильтровать документ в соответствии с userId
пользователя. А затем применить фильтр к функции update
согласно videoId
.
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 = 1ifiedCount = 0 upsertedId = null
Я в замешательстве, если он может соответствовать записи в массиве, почему это не удаляет это? Чего мне не хватает?