у меня есть документ
[
{
"contentId": "62738f2fba6155003dd1e25d",
"tags": [
"spring boot",
"spring jpa"
]
},
{
"contentId": "62738f98ba6155003dd1e25e",
"tags": [
"spring",
"java"
]
}
]
Мне нужно написать выражение @Query в spring jpa, чтобы получить результаты с тегами, соответствующими регулярному выражению '.пр.'. Таким образом, ожидаемым результатом будет набор всех совпадающих тегов.
[весна, весенняя загрузка, весна jpa]
Я пытался написать как
@Query(value = "{tags : { '$regex' : ?0 , $options: 'i'}}", fields = "{tags : 1,_id : 0}")
Set<String> findByTags(String tag);
но это дает мне все документы с соответствующими тегами.
Пожалуйста, помогите мне получить массив совпадающих текстов.
Вы можете использовать $фильтр из структуры агрегации, чтобы получить только соответствующие элементы массива.
db.collection.aggregate([
{
$project: {
d: {
$filter: {
input: "$tags",
as: "num",
cond: {
$regexMatch: {
input: "$$num",
regex: ".*spr.*"
}
}
}
}
}
}
])
Я обновил запрос на "{$project: {d: {$filter: {input: '$tags', as: 'num', cond: {$regexMatch: {input: '$$num', regex: ?0 , options : 'i'}}}}}}", "{ $unwind : { path : '$d'}}", "{ $group : { _id : { id : '$id'}, tags: { $addToSet : '$d'}}}", "{ $project : { _id : 0, tags: 1}}" и я получил ожидаемые результаты. Я не могу обновить ответ из-за ошибки «Предлагаемая очередь редактирования заполнена». Спасибо за быстрый ответ.
Мой ожидаемый результат: [spring, spring boot, spring jpa], можем ли мы добиться этого в spring-mongorepository