嵌套数组elemmatch的Spring数据mongodb标准

嵌套数组elemmatch的Spring数据mongodb标准,mongodb,spring-boot,spring-data-mongodb,Mongodb,Spring Boot,Spring Data Mongodb,我试图查询包含嵌套数组的mongo db文档 这是我的豆子: public class Invitation { @JsonIgnore private UUID id; @DBRef private Personne personne; private List<Boolean> disponibilites; private InvitationStatus status; @DBRef private Gr

我试图查询包含嵌套数组的mongo db文档

这是我的豆子:

public class Invitation {
    @JsonIgnore
    private UUID id;

    @DBRef
    private Personne personne;

    private List<Boolean> disponibilites;

    private InvitationStatus status;

    @DBRef
    private Groupe groupe;
公开课邀请{
@杰索尼奥雷
私有UUID;
@DBRef
私人人员;
私人名单争议;
私人邀请状态;
@DBRef
私人集团;
和组: @文档(collection=“groupe”)

公共类组{
@身份证
私有字符串id;
私有字符串名称;
私人名单成员;
@DBRef
私人业主;
公共组(){
}
这是我试图查询的文档:

@Document(collection = "evenement")
public class Sondage {

    @Id
    private String id;
    private String nom;
   // @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date dateCreation;
    private Date dateExpiration;
    private List<Invitation> invitations;
@文档(collection=“evenment”)
公开课十四行诗{
@身份证
私有字符串id;
私有字符串名称;
//@JsonFormat(pattern=“yyyy-MM-dd HH:MM:ss”)
私人日期创建;
私有日期到期;
私人名单邀请;
我的问题是:

Criteria finished = Criteria.where(SONDAGE_STATUS).is(SondageStatus.FINISHED);
Criteria isExpired = Criteria.where(DATE_EXPIRATION).gt(new Date());
// liste des personnes invitées dans un groupe
Criteria member = Criteria.where("invitations.groupe.membres").elemMatch(Criteria.where("id").is(personId));
Query bquery = new Query(new Criteria().andOperator(isExpired,finished,member));
bquery.with(sort);
bquery.fields().position("invitations.groupe.membres", 1);
List<Sondage> membersInvitationList = mongoTemplate.find(bquery, Sondage.class);
Criteria finished=Criteria.where(SONDAGE_STATUS).is(SondageStatus.finished);
Criteria isExpired=Criteria.where(DATE_EXPIRATION).gt(new DATE());
//联合国集团邀请人员名单
Criteria成员=Criteria.where(“investments.groupe.membres”).elemMatch(Criteria.where(“id”).is(personId));
Query bquery=new Query(new Criteria().andOperator(isExpired,finished,member));
带(排序)的查询;
bquery.fields().position(“investments.groupe.membres”,1);
List membersInvitationList=mongoTemplate.find(bquery,Sondage.class);
启动服务时,出现以下错误:org.springframework.data.mapping.model.MappingException:无效路径引用investments.groupe.membres.id!只能直接或通过其id属性指向关联


有人能帮我吗?

你不能在查询中遍历
DBRef
。你真的应该从你的代码中删除所有
DBRef
用法,因为它根本不受MongoDB现在所做的更现代的操作的支持。看看过去几年来是如何做到这一点的。谢谢@NeilLunn我已经删除了DBRef,它可以工作了
Criteria finished = Criteria.where(SONDAGE_STATUS).is(SondageStatus.FINISHED);
Criteria isExpired = Criteria.where(DATE_EXPIRATION).gt(new Date());
// liste des personnes invitées dans un groupe
Criteria member = Criteria.where("invitations.groupe.membres").elemMatch(Criteria.where("id").is(personId));
Query bquery = new Query(new Criteria().andOperator(isExpired,finished,member));
bquery.with(sort);
bquery.fields().position("invitations.groupe.membres", 1);
List<Sondage> membersInvitationList = mongoTemplate.find(bquery, Sondage.class);