提问者:小点点

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


我必须创建一个服务,该服务获取文本列表并在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数据Mongo从嵌入式文档中的给定列表中搜索的内容。任何帮助都将不胜感激。


共1个答案

匿名用户

您应该能够使用$elemMatch和正则表达式标准来执行此操作。Spring data mongoDB中的$elemMatch等价物对Spring data中的$elemMatch进行了很好的讨论。类似于:

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