我使用Spring Data的CrudRepository和mongodb,我有一些问题要编写一个查询,它将选择一个具有特定子文档值的文档。这是一个例子:
{
"_id" :,
"_class" :,
"matchHeader" : {
"suspend" : {},
"active" : true,
"booked" : true,
"eventId" : NumberLong(1009314492),
"status" : ""
},
"matchInfo" : {
}
}
}
我需要在 matchHeader 子文档中选择具有特定 eventId 字段的文档。我试着写一个像 findByMatchHeaderEventId(id) 这样的函数,但它并没有帮助我怎样才能实现呢?
答案 0 :(得分:3)
嵌套属性的属性遍历在Spring Data MongoDB Reference Documentation。
中进行了解释您需要正确定义域对象类(省略构造函数/ getters / setters):
RewriteEngine On
RewriteRule ^((?!bpc).*)$ /bpc/$1 [NC,L,QSA]
和您的存储库类
public class MyDocument {
@Id
private String id;
private MatchHeader matchHeader;
private MatchInfo matchInfo;
...
}
public class MatchHeader {
private Map<,> suspend;
private boolean active;
private boolean booked;
private Long eventId;
private String status;
}
否则,您可以尝试另一个答案中建议的 findByMatchHeader_EventId 。
答案 1 :(得分:2)
尝试
findByMatchHeader_EventId
而不是
findByMatchHeaderEventId
答案 2 :(得分:0)
您可以使用 org.springframework.data.mongodb.core.query.Query 来准备自定义查询,以获取具有特定子文档 Key 值的文档。
在你的情况下,你可以这样编码:
Query query = new Query();
query.addCriteria(Criteria.where("matchHeader.eventId").is(id));
注意:但是对于查询,您将需要使用 MongoTemplate。