使用Spring数据Mongo在嵌入式数组中搜索文本列表

时间:2019-07-07 14:15:06

标签: java regex mongodb spring-data-mongodb

我必须创建一个服务,该服务接受文本列表并在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/]}})

这是因为根据official doc,我们不能将$regex$in一起使用。但是,我找不到将其转换为Spring Data Mongo查询的方法。

Stackoverflow线程说明了如何使用正则表达式在嵌入式数组中搜索单个文本,但是我找不到关于使用Spring数据Mongo从嵌入式文档中的给定列表进行搜索的任何信息。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您应该可以使用<h2 id='ip'>Test</h2>和正则表达式条件来执行此操作。 $elemMatch equivalent in spring data mongodb在春季数据中对$elemMatch进行了很好的讨论。像这样:

$elemMatch