mongodb - 如何为mongoDB中的子文档编写具有多个或条件的条件查询
问题描述
我正在尝试为其中包含子文档的文档编写条件查询。我想查询文档的项目和带有一些和多个或条件的子文档。以下是我的文档结构
public class ParentEntity {
@Id
private String id;
private String sName;
private String itemDesc;
private String localTimeStamp;
private boolean isStatus;
private List<ChildEntity> childEntity;
private List<String> itemList;
}
public class ChildEntity{
private String prc;
private LocalDate effDate;
}
现在我想查询一个满足以下条件的条件
如果 isStatus 为真,我们将获取
如果 effDate 是今天,我们将获取。
如果 localTimeStamp= null 或 localTimeStamp 为空或 mongoDb 集合中不存在 localTimeStamp 字段,我们将获取
so in one expression the condition is 1 and (2 or 3)
下面是我的代码我所做的
Criteria criteria = new Criteria();
Query query = new Query();
criteria.add("isStatus").is(true);
criteria.andOperator(criteria.orOperator(Criteria.where("childentity.effDate").is(LocalDate.now),Criteria.where("localTimeStamp").is("");
query.addCriteria(criteria);
List<ParentEntity> list = mongoTemplate.find(query,ParentEntity.class);
当 isStatus 为 true 且 effDate 为今天且 localTimeStamp 为 "" 时,这给了我结果,但我还想检查 localTimeStamp=null 和 localTimeStamp 归档文件中不存在。
我如何将 3 或 s 包含在一个和运算符的单个条件中?有人帮助我,我是 mongoDb 的新手。
解决方案
我建议调查spring-boot-starter-data-search。
- 将启动器添加到您的 pom 文件中:
<dependency>
<groupId>app.commerce-io</groupId>
<artifactId>spring-boot-starter-data-search-mongodb</artifactId>
<version>1.1.0</version>
</dependency>
- 启用搜索存储库:
@Configuration
@EnableMongoRepositories(repositoryBaseClass = SearchRepositoryImpl.class)
public class MyConfiguration {
}
- 使您的存储库扩展
SearchRepository
@Repository
public interface UserRepository extends SearchRepository<UserDocument, String> {
}
- 使用此存储库获取您的数据
String search = "address.name: myName or email: myEmail and (address.country: FR and address.city: Paris)";
Page<UserDocument> result = userRepository.findAll(search, pageable);
您可以在此处找到 MongoDB 的演示
免责声明:我是 spring-boot-starter-data-search 的贡献者
推荐阅读
- linux - 如何在 sh linux shell 中迭代两个参数
- woocommerce - Woocommerce:在输出前翻译/更改订单项元键
- r - 定义一个新列
- amazon-web-services - Git Lab 到 AWS S3 的集成
- firebase - Firebase Cloud Firestore 创建条目或更新(如果已存在)
- r - 将函数应用于 R 中的每两列
- python - 在 Python 中标记 10 个文档的语料库
- python - tensorflow导入错误有人可以帮我吗
- perl - 在 windows 上为草莓 5.30 编译 mod_perl2
- android - 我可以在 RadioGroup 中有一个 LinearLayout 吗?