首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子阵上的Mongo管线投影

子阵上的Mongo管线投影
EN

Stack Overflow用户
提问于 2021-03-15 12:09:30
回答 1查看 51关注 0票数 1

我有以下文件:

代码语言:javascript
运行
复制
{
    id: "myId",
    boundedPlan: {
        plannedWeeks: [
            0 : {
                weekStartDate: date
                weekEndDate: date
                plannedDays: []
            },
            ...
        ]
    },
    unboundedPlan: {
        plannedWeeks: [
            0 : {
                weekStartDate: date
                weekEndDate: date
                plannedDays: []
            },
            ...
        ]
    }
}

这个计划代表了未来的几个星期。这个计划有一个有界或无界的计划。

(我在两个不同的字段上有相同的结构,因为在代码中,它们对应于两个行为不同的不同类)。

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

“让当前的计划周确定一个日期”

我编写了以下管道:

代码语言:javascript
运行
复制
[
    { "$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"}}}}
        }]}
    }
]

问题如下:

  • 知道我使用无界计划操作一个计划,并显式地设置第二个匹配:

代码语言:javascript
运行
复制
"$match" : { 
    "unboundedPlan.plannedWeeks" : { 
        "$elemMatch" : { "weekStart" : { "$lte" : { "$date" : "2021-03-10T00:00:00Z"}}, "weekEnd" : { "$gte" : { "$date" : "2021-03-10T00:00:00Z"}}}}, 
}

很管用。

当然,

  • 我不知道计划是来自无界字段还是有界字段,所以我尝试添加or运算符,这导致根本没有选择。

我遗漏了什么东西吗?(使用spring数据mongo)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 09:44:42

好吧,发现了..。我错误地使用了spring中的OrOperator类:

代码语言:javascript
运行
复制
new Criteria("field1").orOperator(new Criteria("field2")) 

代码语言:javascript
运行
复制
new Criteria().orOperator(new Criteria("field1"), new Criteria("field2")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66637733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档