java 蒙古Spring Data 库:检查项目筛选阶段中是否有字段为空或不存在字段

qacovj5a  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(134)

我在聚合管道中有一个阶段,在这个阶段中,我过滤终止日期为null或不存在的数组元素。

{
    "$project": {
        "_id": 1,
        "name": 1,
        "versions": {
            "$filter": {
                "input": "$versions",
                "as": "v",
                "cond": {
                    "$lte": [
                        "$$v.terminationDate", null
                    ]
                }
            }
        }
    }
}

这在Mongo shell中运行良好。MongoPlayGround
但是,我不知道如何在spring-data-mongodb中编写这些内容。

Aggregation.project()
    .andInclude("name")
    .and(Filter.filter("versions")
        .as("v")
        .by(ComparisonOperators.valueOf("$$v.terminationDate").lessThanEqualToValue(null)))
    .as("versions");

但是,lessThanEqualToValue不接受空值。
请帮帮我。

bcs8qyzn

bcs8qyzn1#

我认为这是可行的。目标是使用$ifNull重新生成this query,这样您就可以尝试类似这样的操作:
更新了从评论到完美工作的小变化:

Aggregation.project()
    .andInclude("name")
    .and(Filter.filter("versions")
        .as("v")
        .by(ComparisonOperators.valueOf(ConditionalOperators.ifNull("$$v.terminationDate")
                .then(true)).equalToValue(true))
    .as("versions");

相关问题