Spring 数据 MongoDB 数组中正则表达式搜索的条件

Spring data MongoDB Criteria for regex search in array

我想使用 MongoOperations 搜索数组字段中具有特定值的文档。 文档如下所示:

{countries: ["UK", "US", "JP"]}
{countries: ["UK"]}

我想要执行的查询看起来像这样(当我从云端 运行 它工作正常 mongo ui):

{
countries: { $elemMatch: {$regex: "uk", $options: 'i'}},  
countries: { $elemMatch: {$regex: "Us", $options: 'i'}}
} 

目的是 return 具有查询中指定的所有国家/地区的文档,并且不区分大小写进行搜索。 所以这个查询应该 return 只有第一个文档,因为它同时包含 UK 和 US。

请注意,要搜索的国家/地区列表(本例中为英国和美国)是作为参数接收的,因此我事先不知道列表中会有多少国家/地区。 这就是为什么我想使用 Criteria api,但无法使用 api.

创建此查询的原因

有办法吗?

节点:我设法使用排序规则使其工作(请参阅下面的解决方案)但我想避免这种情况,因为我不想对语言环境进行硬编码。 使用排序规则的代码:

Criteria.where("countries")
.all(countriesList);
.collation(Collation.of(Locale.US).strength(Collation.ComparisonLevel.secondary()););

您可以尝试使用此方法在您的查询中应用正则表达式

Criteria.where("countries").regex("A"));

我最后做的是,而不是这个查询:

{
countries: { $elemMatch: {$regex: "uk", $options: 'i'}},  
countries: { $elemMatch: {$regex: "Us", $options: 'i'}}
} 

我运行这个

{
    countries: { $regex: "uk|Us", $options: 'i'}
}

第二个可以像这样简单地构建:

Criteria.where(key).regex(regex, "i");

两者并不完全相同。第一个执行 AND,但第二个在条件之间执行 and OR。对于我的场景,这很好。