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

时间:2019-03-26 19:49:23

标签: mongodb criteria spring-data-mongodb

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

$n<3

我正在尝试创建一个标准查询,该查询将字符串列表传递给该查询,并检查成分是否包含查询的所有元素(最好不区分大小写)。

我尝试过的事情:

public class Recipe {

    @Id
    private UUID id;
    private String name;
    private Set<String> ingredients;

“由于com.mongodb.BasicDocument的限制,您不能添加第二个“成分”条件。查询已包含”最多可以满足在其他集合中搜索不区分大小写的任何集合的尝试< / p>

谢谢。

1 个答案:

答案 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);
        }