Mongo 子阵列上的管道投影

Mongo pipeline projection on sub array

我有以下文件:

{
    id: "myId",
    boundedPlan: {
        plannedWeeks: [
            0 : {
                weekStartDate: date
                weekEndDate: date
                plannedDays: []
            },
            ...
        ]
    },
    unboundedPlan: {
        plannedWeeks: [
            0 : {
                weekStartDate: date
                weekEndDate: date
                plannedDays: []
            },
            ...
        ]
    }
}

这个计划代表了未来的几个星期。该计划有一个有界或无界的计划。
(我在两个不同的字段上有相同的结构,因为在代码中它们对应于两个不同的 类 具有不同的行为)。

我现在必须执行以下查询。

“获取给定日期的当前计划周”

我写了以下管道:

[
    { "$match" : { "ownerId" : "defaultOwnerId"}},
    { "$project" : { 
        "boundedPlan" : 1, 
        "unboundedPlan" : 1, 
        "plannedWeeks" : { 
            "$cond" : { 
                "if" : { "$ne" : ["$boundedPlan", null]}, "then" : "$boundedPlan.plannedWeeks", 
                "else" : "$unboundedPlan.plannedWeeks"}
            }
        }
    }, 
    { "$match" : { 
        "boundedPlan.plannedWeeks" : { 
            "$elemMatch" : { "weekStart" : { "$lte" : { "$date" : "2021-03-10T00:00:00Z"}}, "weekEnd" : { "$gte" : { "$date" : "2021-03-10T00:00:00Z"}}}}, 
        "$or" : [{ 
            "unboundedPlan.plannedWeeks" : { 
                "$elemMatch" : { "weekStart" : { "$lte" : { "$date" : "2021-03-10T00:00:00Z"}}, "weekEnd" : { "$gte" : { "$date" : "2021-03-10T00:00:00Z"}}}}
        }]}
    }
]

问题如下:

"$match" : { 
    "unboundedPlan.plannedWeeks" : { 
        "$elemMatch" : { "weekStart" : { "$lte" : { "$date" : "2021-03-10T00:00:00Z"}}, "weekEnd" : { "$gte" : { "$date" : "2021-03-10T00:00:00Z"}}}}, 
}

有效。

我是不是漏了什么? (使用 spring 数据 mongo)

谢谢

好的,发现...我错误地使用了来自 spring 数据 mongo 的 OrOperator class:

new Criteria("field1").orOperator(new Criteria("field2")) 

不同
new Criteria().orOperator(new Criteria("field1"), new Criteria("field2")