【问题标题】:MongoDB DSL filtersMongoDB DSL 过滤器
【发布时间】:2020-05-25 12:03:01
【问题描述】:

使用 DSL 过滤时,如果传递的过滤器为空,则结果为空。您能否就如何忽略未设置的 URL 参数提出一些建议。

例子:

@Query(value ="{$and:[{'country.name':{$eq:?0}},{'providerName':{$eq:?1}}]})"

上述查询工作正常,文档已返回。但如果位置过滤器为空,则结果为空。如果未设置值,如何编写忽略参数的查询。

亲切的问候, 阿杰

【问题讨论】:

    标签: spring mongodb mongodb-query dsl


    【解决方案1】:

    在这种情况下,我强烈建议使用 Query API 来构建基于正在传递的参数的查询,但是如果你想使用查询 DSL,可以这样做,你必须检查 null 和可以相应地构建查询。

    @Query("{$and :["
            + "?#{ [0] == null ? { $where : 'true'} : { 'country.name' : {$eq:[0]}} },"
            + "?#{ [1] == null ? { $where : 'true'} : { 'providerName' : {$eq:[1]}}}"
            + "]}")
    

    参考:mongodb.repositories.queries.json-spel

    【讨论】:

    • 语法正确。但返回的文件是空的。看起来条件运算符检查空值并将空值 nack 分配给变量。示例:如果变量 [0]==null 则变为 country.name ={}
    • 哦,好吧,我想有一个小的更正,你可以试试这个吗? @Query(value ="{$and:[?#[0] == null ? {} : {'country.name':{$eq:?0}},?#[1] == null ? {} : {'providerName':{$eq:?1}}]})",如果可行,我会更新答案。
    • 您好,我们的想法是一样的。但对我不起作用。异常“JSON阅读器期待一个值但发现':'。”“仔细检查查询格式是否有问题。但在第一时刻,它看起来很好。我故意像@Query( value ="{$and:[?#[0] == null ? {} : {'country.name':{$eq:?0}},{'providerName':{$eq:?1}}] }
    • @AjayKumarVasireddy 我已经添加了更新的查询,这应该可以正常工作。请检查并告诉我。
    • No @Deepak 不幸的是,它没有用。我倾向于放弃这一点,并将尝试使用 API。使用查询时的异常是“message”:“JSON reader was Expecting a value but found '}'.”,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多