spring数据mongodb,比较同一文档中的两个字段

gupuwyp2  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(491)

我有以下收藏:

@Data
@Document(collection = "compte_titre_composition")
public class CompteTitreComposition {

  @Id private String id;

  @Field("numero_compte_titre")
  private String numeroCompte;

  private BigDecimal valorisationActuelle;

  @Field("date_valorisation")
  private Date dateValorisation;

  @Field("date_validite")
  private Date dateValidite;

}

我想选择元素作为datevalorisation,numerocompte等于方法params和datevalorisation>=datevalidite,所以我编写了以下代码:

public List<EvolutionCompteTitreDto> getCpteTitreEvolution(
      String numeroCompte, LocalDateTime dateDebut, LocalDateTime dateFin) {

    List<AggregationOperation> listAggregations = new ArrayList<>();

    AggregationOperation matchByCpteAndDateValorisation =
        Aggregation.match(
            Criteria.where("numeroCompte")
                .is(numeroCompte)
                .and("dateValorisation")
                .gte("dateValidite")
                .gte(dateDebut)
                .lte(dateFin));

除了这个条件datevalorisation>=datevalidite(似乎没有考虑它)代码没有考虑它之外,所有条件都可以正常工作

gudnpqoy

gudnpqoy1#

问题来自错误的比较方法gte()将对象作为参数进行比较。在比较同一文档中的两个字段时,我们应该创建如下表达式:

AggregationOperation projetByValidDate =
    Aggregation.project(
            "dateValorisation",
            "dateValidite",
            "numeroCompte")
        .andExpression("dateValorisation - dateValidite")
        .as("duration");

AggregationOperation matchByCpteAndDateValorisation =
    Aggregation.match(
        Criteria.where("numeroCompte")
            .is(numeroCompte)
            .and("dateValorisation")
            .gte(dateDebut)
            .lte(dateFin)
            .and("duration")
            .gte(0));

最后,这个解决方案对我有效

相关问题