问题描述
{
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"}},}
有效。
- 当然我不知道计划是来自无界还是有界字段,所以我尝试添加 or 运算符,这导致根本没有选择。
有什么我遗漏的吗? (使用 spring 数据 mongo)
谢谢
解决方法
好的,发现了……我错误地使用了 spring data mongo 中的 OrOperator 类:
new Criteria("field1").orOperator(new Criteria("field2"))
与
不一样new Criteria().orOperator(new Criteria("field1"),new Criteria("field2")