簡體   English   中英

子文檔字段的Spring數據mongodb查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM