mongodb - 使用 mongotemplate 的多个条件或运算符
问题描述
我制作了一个带有 2 个输入的过滤器。 阵列状态 APPROVE 或 APPROVE 的第一个输入。第二个输入是基于 sku 或标题或描述的文本。我使用这个查询。如果我在邮递员中传递参数,则第一个输入数组状态正在工作。但如果我还通过第二个输入文本是错误“由于 com.mongodb.BasicDocument 的限制,您不能添加第二个 'null' 条件。查询已经包含 '{ "$or" : [{ "status" :“不批准”},{“状态”:“批准”}] }'”
Query query = new Query().with(pageable);
if (searchCriteria.getStatus() != null) {
if (searchCriteria.getStatus().length == 1) {
query.addCriteria(Criteria.where("status").is(searchCriteria.getStatus()[0]));
} else {
query.addCriteria(new Criteria().orOperator(
Criteria.where("status").is(searchCriteria.getStatus()[0]),
Criteria.where("status").is(searchCriteria.getStatus()[1])));
}
}
if (searchCriteria.getText() != null) {
query.addCriteria( new Criteria()
.orOperator(
Criteria.where("title").regex(searchCriteria.getText(), "i"),
Criteria.where("description").regex(searchCriteria.getText(), "i"),
Criteria.where("item.sku").is(searchCriteria.getText())
));
}
解决方案
您不能同时使用Or
这两个字段,您需要使用In
. 例如query.addCriteria(Criteria.where("status").in(<YOUR_ARRAY>))
推荐阅读
- node.js - 从另一个字段移动数据时,Mongoose Mongodb Cast to Embedded / Number 值失败
- c# - 当前上下文中不存在名称 Process.Start
- r - 犰狳矩阵列的非连续访问
- ios - 从 firebase 检索数据并设置 VC 以匹配用户偏好
- node.js - 为什么在 IBM Cloud 上托管的 Cloud Foundry 应用程序中删除了 fs(文件系统)?
- sql - Oracle SELF JOIN 提出建议
- python - 在python中为groupby()选择单个值
- css - iOS 13 及更低版本 CSS 动画闪烁
- android - 如何使 Webview 在 Kiosk 自助服务中工作
- swift - SwiftUI我怎么能在圆圈旁边有2个文字