Mongodb 如何在Spring data mongo中查询生日

Mongodb 如何在Spring data mongo中查询生日,mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,我无法查询今天是谁的生日的所有记录。我只需要日月比赛 我尝试了许多组合,包括$match和$expr。似乎什么都没用 public interface GenericPolicyRepository extends MongoRepository<GenericPolicy, String> { @Query("{ 'agentId': ?0 , '$expr': { '$eq': [{ '$month': '$dateOfBirth' }, ?1]}, '$expr': {

我无法查询今天是谁的生日的所有记录。我只需要日月比赛

我尝试了许多组合,包括$match和$expr。似乎什么都没用

public interface GenericPolicyRepository extends MongoRepository<GenericPolicy, String> {
    @Query("{ 'agentId': ?0 , '$expr': { '$eq': [{ '$month': '$dateOfBirth' }, ?1]}, '$expr': { '$eq': [{ '$dayOfMonth': '$dateOfBirth' }, ?2]}}")
    public List<GenericPolicy> findAllBirthDaysByAgent(String agentId, String month, String day);
}
//保险细节

 public class InsuredDetails {

        @NotNull
        private String nationality;
        @NotNull
        private String fullName;
        @NotNull
        private String gender;
        @NotNull
        private Date dateOfBirth;
        @NotNull
        private String identityType;
        @NotNull
        private String identityNumber;
        @NotNull
        @Email
        private String emailaddress;
        @NotNull
        @Size(max = 10,min = 10)
        private String mobileNumber;
        @NotNull
        private String addressLine1;
        @NotNull
        private String addressLine2;
        @NotNull
        private String postCode;
    }

请在下面的查询中尝试,其中dateOfBirth是保存在您的集合中的密钥。在这里,我们将当前日期的月份和月份与存储在集合中的日期进行匹配

  {
            $expr: {
                        "$and": [
                            {"$eq": [{"$dayOfMonth": "$dateOfBirth"}, {"$dayOfMonth": new Date()}]},
                            {"$eq": [{"$month": "$dateOfBirth"}, {"$month": new Date()}]}
                        ]
                    }
  }

根据所提到的类,给定文档有一个嵌套文档受保详细信息(假设在db中也是相同的名称)。此字段具有出生日期字段。记住这一事实,可以按如下方式编写查询

public interface GenericPolicyRepository extends MongoRepository<GenericPolicy, String> {
    @Query("{'agentId': ?0 , '$expr': {'$and': [{'$eq': [{'$dayOfMonth': '$insuredDetails.dateOfBirth'}, {'$dayOfMonth': ?1}]}, {'$eq': [{'$month': '$insuredDetails.dateOfBirth'}, {'month': ?1}]}]}}")
    public List<GenericPolicy> findAllBirthDaysByAgent(String agentId, Date birthDate);
}
公共接口GenericPolicyRepository扩展了MongoRepository{
@查询({'agentId':?0,$expr':{'$and':[{'$eq':[{'$dayOfMonth':'$insuredDetails.dateOfBirth'},{'$dayOfMonth':?1}]},{'$eq':[{'$month':'$insuredDetails.dateOfBirth'},{'month':?1}]})
公共列表findAllBirthDaysByAgent(字符串agentId,日期birthDate);
}
用法

public class GenericPolicyServiceImpl implements GenericPolicyService {

    @Autowired
    GenericPolicyRepository genericPolicyRepository;

    public List<GenericPolicy> getAllBirthDaysByAgent(String agentId, String month, String day){
        Calendar c = Calendar.getInstance();
        int month = Integer.parseInt(month);
        int day = Integer.parseInt(day);
        c.set(0, month, day, 0, 0);
        Date birthDate = c.getTime();
        genericPolicyRepository.findAllBirthDaysByAgent(agentId, birthDate);
    }
}
公共类GenericPolicyServiceImpl实现GenericPolicyService{
@自动连线
GenericPolicyRepository GenericPolicyRepository;
公共列表GetAllBirthdaysBagent(字符串agentId、字符串月份、字符串日期){
Calendar c=Calendar.getInstance();
int month=整数.parseInt(月);
int day=Integer.parseInt(天);
c、 设置(0,月,日,0,0);
Date birthDate=c.getTime();
genericPolicyRepository.findallbirthdaysYagent(agentId,生日);
}
}

谢谢,但这可以直接在mongo cli上运行。获取大量json解析器异常。我正在努力让它工作。嗨,你能显示“GenericPolicy”类定义吗???@Nithin我添加了它。It接口。是的,“GenericPolicyRepository”实体是一个接口,但我想问一下您的“GenericPolicy.class”文件。@Nithin。抱歉,我添加了所有必需的详细信息。非常感谢。它说未知的顶级操作exprIt是因为版本。我实际上是在活板门上测试它。这个也有语法错误。“{'agentId':?0,$redact':{”+“$cond':[“+”'$和“:[“+”{'$dayOfMonth':“$insuredDetails.dateOfBirth'},{'$dayOfMonth':?1},”+“{'$eq':[{'$month':“$insuredDetails.dateOfBirth'},{'month'+':“+”],“,“+”,“+”,“+”,“$$dayOfMonth':$1},”,“$”
public class GenericPolicyServiceImpl implements GenericPolicyService {

    @Autowired
    GenericPolicyRepository genericPolicyRepository;

    public List<GenericPolicy> getAllBirthDaysByAgent(String agentId, String month, String day){
        Calendar c = Calendar.getInstance();
        int month = Integer.parseInt(month);
        int day = Integer.parseInt(day);
        c.set(0, month, day, 0, 0);
        Date birthDate = c.getTime();
        genericPolicyRepository.findAllBirthDaysByAgent(agentId, birthDate);
    }
}