我遇到的问题如下: 我有结构
$n<3
我正在尝试创建一个标准查询,该查询将字符串列表传递给该查询,并检查成分是否包含查询的所有元素(最好不区分大小写)。
我尝试过的事情:
public class Recipe {
@Id
private UUID id;
private String name;
private Set<String> ingredients;
“由于com.mongodb.BasicDocument的限制,您不能添加第二个“成分”条件。查询已包含”最多可以满足在其他集合中搜索不区分大小写的任何集合的尝试< / p>
谢谢。
答案 0 :(得分:0)
我发现在这个示例中我必须使用.all()
来确保所有成分都在查询列表中,但是正如注释中所提到的,这不能解决不区分大小写的问题问题:
if (!recipeQuery.getIngredients().isEmpty()) {
Criteria categories = Criteria.where("ingredients").all(recipeQuery.getIngredients());
query.addCriteria(categories);
}
这也解决了案件问题
if (!recipeQuery.getIngredients().isEmpty()) {
Criteria categories = new Criteria();
categories.andOperator(recipeQuery.getIngredients().stream()
.map(i -> Criteria.where("ingredients").regex(".*" + i + ".*", "i"))
.toArray(Criteria[]::new));
query.addCriteria(categories);
}