我想写一个spring-boot程序来获取name、id和key的值,其中abc.active为true。我写了一些代码
@Repository
public interface SwitchRepoDao extends MongoRepository< SwitchRepo, String> {
public List<SwitchRepo> findByAbc_active(boolean active);
}
另外,我编写了接口类。
@Document(collection="switchrepo")
public class SwitchRepo{
@Id
private String id;
private String type;
private List<Abc> abc;
// with getters and setters also constructors.
public class Abc{
private String name;
private String id;
private String key;
private boolean active;
@Bean
CommandLineRunner runner(SwitchRepoDao switchRepoDao) {
return new CommandLineRunner() {
@Override
public void run(String... args) throws Exception {
Iterable<SwitchRepo> personList = switchRepoDao.findAllWithStatus(true);
System.out.println("Configuration : ");
for (SwitchRepo config : personList)
{
System.out.println(config.getRegistries().toString());
}
}
};
}
"_id" : "1234567890",
"type" : "xyz",
"abc" : [
{
"name" : "test",
"id" : "test1",
"key" : "secret",
"active" : true
},
{
"name" : "test2",
"id" : "test12",
"key" : "secret2",
"active" : false
}
]
}
作为响应,我需要输出如下
"id" : "test1",
"key" : "secret",
"active" : true
因为active在该子文档数组中为true。
我得到的实际结果是“abc”:[{“name”:“test”,“id”:“test1”,“key”:“secret”,“active”:true},{“name”:“test2”,“id”:“test12”,“key”:“secret2”,“active”:false}]
当字段类型为数组时,不能对proprety使用属性表达式。
这里使用@Query或聚合的解决方案
解决方案1(使用@query)
@Repository
public interface SwitchRepoDao extends MongoRepository< SwitchRepo, String> {
//public List<SwitchRepo> findByAbc_active(boolean active);
@Query(value = "{ 'abc.active' : ?0}", fields = "{ 'abc' : 1 }")
List<SwitchRepo> findAllWithStatus(Boolean status);
}
{ 'abc.active' : ?0} for filtring
{ 'abc' : 1 } for only return that part of the document (abc).
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="switchrepo")
public class SwitchRepoDto {
@Id
private String id;
private String type;
private Abc abc;
// with getters and setters also constructors.
public SwitchRepoDto() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Abc getAbc() {
return abc;
}
public void setAbc(Abc abc) {
this.abc = abc;
}
}
创建自定义方法,将自定义方法添加到存储库,或者将MongoOperations注入到服务层。
@Autowired
private MongoOperations mongoOperations;
public List<SwitchRepoDto> findAllActive() {
UnwindOperation unwind = Aggregation.unwind("$abc");
MatchOperation match = Aggregation.match(Criteria.where("abc.active").is(true));
Aggregation aggregation = Aggregation.newAggregation(unwind,match);
AggregationResults<SwitchRepoDto> results = mongoOperations.aggregate(aggregation, SwitchRepoDto.class, SwitchRepoDto.class);
List<SwitchRepoDto> mappedResults = results.getMappedResults();
return mappedResults;
}
我正在使用Spring Boot和Spring data jpa。我也在使用hibernate envers,我需要访问AuditReaderFactory,以便我可以编写审计查询。 因为它是Spring Boot和spring数据jpa,所以一切都是自动配置的。所以当我这么做的时候, 它不起作用。我得到以下错误。 如何在我的存储库类中获得对AuditReaderFactory的正确引用?
我想访问application.properties中提供的值,例如: 我想在Spring Boot应用程序中访问主程序中的userBucket.path
来自OpenJDK的Dockerfile:8-jdk-alpine ADD target/.war admin_portal.war ENTRYPOINT[“java”,“-jar”,“admin_portal.war”]来自OpenJDK的Dockerfile:8-jdk-alpine ADD target/.war ui_app.war ENTRYPOINT[“java”,“-jar”,“ui
问题内容: 我想访问中提供的值,例如: 我想在Spring Boot应用程序的主程序中访问。 问题答案: 你可以使用批注并在使用的任何Spring bean中访问属性 Spring Boot文档的Externalized Configuration部分介绍了你可能需要的所有详细信息。
我正在尝试访问src/main/Resources/XYZ/view文件夹中的xsd,其中XYZ/view文件夹是由我创建的,文件夹具有我需要进行xml验证的abc.xsd。 当我每次尝试访问xsd时,结果为null, 我试过了, 1) 2) 以及我为获取资源或类加载器等而进行的更多跟踪。 最后我得到了xsd, 文件文件 = 新文件(新类路径资源(“/src/main/resources/XYZ/
我正在尝试在我的Spring Boot(1.2.0.m1)应用程序中设置HikariCP,这样我就可以使用它来代替Tomcat DBCP进行测试。我想在application.properties文件中配置连接池,就像使用Tomcat一样,但我不知道应该怎么做。我找到的所有示例都显示JavaConfig样式,或者使用单独的HikariCP属性文件。有人能帮我找出属性名称来在application.