子文档字段的Spring数据mongodb查询

时间:2014-11-12 12:53:46

标签: java mongodb spring-data spring-data-mongodb nosql

我使用Spring Data的CrudRepository和mongodb,我有一些问题要编写一个查询,它将选择一个具有特定子文档值的文档。这是一个例子:

{
"_id" :,
"_class" :,
"matchHeader" : {
    "suspend" : {},
    "active" : true,
    "booked" : true,
    "eventId" : NumberLong(1009314492),
    "status" : ""
},
"matchInfo" : {

    }
}

}

我需要在 matchHeader 子文档中选择具有特定 eventId 字段的文档。我试着写一个像 findByMatchHeaderEventId(id) 这样的函数,但它并没有帮助我怎样才能实现呢?

3 个答案:

答案 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。