Поиск списка текста во встроенном массиве с использованием Spring data Mongo - PullRequest
2 голосов
/ 07 июля 2019

Мне нужно создать сервис, который принимает список текста и ищет совпадения во встроенном массиве в документах MongoDB.Например, я должен искать этот список текста:

["Tom", "Keanu", "Arnold"]

в следующих коллекциях:

[{id: "123", title: "Movie 1", cast: [{id: 1, name: "Tom Hanks"}, {id: 2, name: "Actor 2"}]}, 
{id: "123", title: "Movie 1", cast: [{id: 1, name: "Keanu Reeves"}, {id: 2, name: "Actor 2"}]}
{id: "123", title: "Movie 1", cast: [{id: 1, name: "Arnold Schwarzenegger"}, {id: 2, name: "Actor 2"}]}]

Поиск выше текста должен вернуть эти три фильма.Мне необходимо создать запрос, подобный приведенному ниже:

db.movies.find({cast.name: {$in: [/Tom/, /Keanu/, /Arnold/]}})

Это потому, что согласно официальному документу мы не можем использовать $regex с $in.Однако я не могу найти способ перевести это в запрос Spring Data Mongo.

Этот поток Stackoverflow объясняет, как искать один текст во встроенном массиве с помощью регулярных выражений, но я не смогне могу найти ничего о поиске по заданному списку во встроенном документе, используя Spring data Mongo.Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 07 июля 2019

Вы должны быть в состоянии сделать это, используя $elemMatch и критерии регулярных выражений. $ elemMatch эквивалент в весенних данных mongodb имеет хорошее обсуждение $elemMatch в весенних данных. Что-то вроде:

Criteria.where("cast").elemMatch(Criteria.where("name").regex("Tom|Keanu|Arnold"));
...