【问题标题】:Spring-boot Optional ArrayList parameter in Json MongoDb QueryJson MongoDb Query中的Spring-boot可选ArrayList参数
【发布时间】:2018-05-17 06:55:34
【问题描述】:

查看其他关于如何使用 mongodb 和参数 inpu 作为列表进行可选参数查询的帖子,我发现它可以通过以下方式完成:

@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);

我的查询如下所示:

@Query("{ $or : [ { $where: '?3 == null' } ,{ input1 : { $in : ?3 } }], 'input2' : ?4 , 'input3' : ?2 ,'dateInput' : {$gt : ?0, $lte : ?1}}")
List<Entities> findThingsbyInputs(Long initialDate, Long endDate, Integer Input2, List<Integer> input1, Integer input3);

当我使用此查询和 Input1 = ?0 = ArrayList 时,如果列表不为空,它会很好地工作,但当 ?0 为空时,会引发异常。我可以用列表查询几个输入参数,但是当为空时,它不起作用。

错误信息是: 查询失败,错误代码 2 和服务器 localhost:27017 上的错误消息“$in 需要一个数组”

有什么帮助吗?并提前感谢

【问题讨论】:

    标签: java mongodb spring-data optional-parameters


    【解决方案1】:

    我遇到了同样的问题,最终扩展了存储库并手动实现了复杂的方法。
    调试后我认为问题是由于当List&lt;Integer&gt; input1null 第一个或条件{ $where: '?3 == null' } 通过但随后第二个{ input1 : { $in : ?3 } } 被执行并最终看起来像:{ input1 : { $in : NULL } } 这导致面临的问题。

    我的解决方案是扩展存储库,实现方法并手动构建所需的查询。在你的情况下,它可能是这样的:

      @Autowired
      MongoTemplate mongoTemplate;
    
      List<Entities> findThingsbyInputs(Long initialDate, Long endDate, Integer input2,
                                        List<Integer> input1, Integer input3) {
        Query query = new Query();
        if(initialDate != null) {
          query.addCriteria(where("input1").is(input1));
        }
    
        query.addCriteria(where("input2").is(input2));
        query.addCriteria(where("input3").is(input3));
        query.addCriteria(new Criteria().andOperator(where("dateInput").gt(initialDate),
            where("dateInput").lt(endDate)));
    
        return mongoTemplate.find(query, Entities.class);
    
      }  
    

    Jira ticket is still not resolved by Spring Team

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2019-10-08
      • 2019-06-14
      • 2023-02-04
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多