[英]Spring Boot Data and MongoDB - Filter Subdocument Array Query
[英]Spring data mongodb query for subdocument field
我正在使用 Spring Data 的 CrudRepository 和 mongodb,我在編寫查詢時遇到了一些問題,該查詢將選擇具有特定子文檔值的文檔。 下面是一個例子:
{
"_id" :,
"_class" :,
"matchHeader" : {
"suspend" : {},
"active" : true,
"booked" : true,
"eventId" : NumberLong(1009314492),
"status" : ""
},
"matchInfo" : {
}
}
}
我需要在matchHeader子文檔中選擇具有特定eventId字段的文檔。 我試圖寫一個像findByMatchHeaderEventId(id)這樣的函數,但它根本沒有幫助。我怎樣才能做到這一點?
The Spring Data MongoDB Reference Documentation解釋了嵌套屬性的屬性遍歷。
您需要正確定義域對象類(省略構造函數/getter/setter):
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;
}
和你的存儲庫類
public interface MyDocumentController extends MongoRepository<MyDocument, String> {
public List<MyDocument> findByMatchHeaderEventId(Long id);
}
否則,您可以嘗試使用另一個答案中建議的findByMatchHeader_EventId 。
嘗試
findByMatchHeader_EventId
代替
findByMatchHeaderEventId
您可以使用 org.springframework.data.mongodb.core.query.Query 來准備自定義查詢以獲取具有特定子文檔 Key 值的文檔。
在您的情況下,您可以編寫如下代碼:
Query query = new Query();
query.addCriteria(Criteria.where("matchHeader.eventId").is(id));
注意:但是對於 Query,您將需要使用 MongoTemplate。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.