我遇到的问题如下:我有结构
public class Recipe {
@Id
private UUID id;
private String name;
private Set<String> ingredients;
我正在尝试创建一个条件查询,我传递一个字符串列表,并检查成分是否包含查询的所有元素(最好不区分大小写)。
我尝试过的:
if (!recipeQuery.getIngredients().isEmpty()) {
recipeQuery.getIngredients().stream()
.map(i -> Criteria.where("ingredients").regex(recipeQuery.getName(), "i"))
.forEach(query::addCriteria);
}
任何尝试在另一个集合中搜索不区分大小写的集合的尝试都已满足“由于com.mongodb.BasicDocument的限制,您无法添加第二个'成分'标准。查询已包含”最多
先感谢您。
我发现我必须在这个例子中使用.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);
}