Получить результат из всех документов mongodb

у меня есть документ

[
    {
      "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);

но это дает мне все документы с соответствующими тегами.

Пожалуйста, помогите мне получить массив совпадающих текстов.

1
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать $фильтр из структуры агрегации, чтобы получить только соответствующие элементы массива.

детская площадка

db.collection.aggregate([
  {
    $project: {
      d: {
        $filter: {
          input: "$tags",
          as: "num",
          cond: {
            $regexMatch: {
              input: "$$num",
              regex: ".*spr.*"
            }
          }
        }
      }
    }
  }
])

Мой ожидаемый результат: [spring, spring boot, spring jpa], можем ли мы добиться этого в spring-mongorepository

Achyut 05.05.2022 18:35
Обратитесь к этому ответу за примером весеннего монгорепо Да, вы можете этого добиться. Я предлагаю вам попробовать и опубликовать новый вопрос
Gibbs 05.05.2022 18:41

Я обновил запрос на "{$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}}" и я получил ожидаемые результаты. Я не могу обновить ответ из-за ошибки «Предлагаемая очередь редактирования заполнена». Спасибо за быстрый ответ.

Achyut 09.05.2022 16:45

Другие вопросы по теме