如何获取列表包含所有查询元素的文档

问题描述 投票:0回答:1

我遇到的问题如下:我有结构

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的限制,您无法添加第二个'成分'标准。查询已包含”最多

先感谢您。

mongodb criteria spring-data-mongodb
1个回答
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);
        }
© www.soinside.com 2019 - 2024. All rights reserved.