mongodb - 如何获取列表包含所有查询元素的文档
问题描述
我遇到的问题如下:我有结构
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()
在此示例中使用 as 以确保所有成分都在查询列表中,但正如评论中提到的那样,这并不能解决不区分大小写的问题:
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);
}
推荐阅读
- python - pygame:最小化和还原时屏幕擦除-下次更新时变为蓝色
- linux - 如何检查文件是否存在但在shell脚本的路径中间泛化?
- python - 当我滚动时 Python Idle 关闭
- macos - 为什么可以覆盖某些静态库中的符号而不能覆盖其他库中的符号?
- ios - 删除具有重复键的对象
- javascript - 如何设置依赖关系以及如何编译 npm 模块?
- python - TypeError:函数最多接受 4 个参数(给定 6 个)
- c - 是否可以在对宏进行字符串化之前处理数学计算?
- swift - RxSwift - 仅在条件下连接
- continuous-integration - VSTS CICD Build pipline 在将最新到期日期的新 .pfx 文件添加到 repo 后失败