子阵列上的 Mongo 管道投影

如何解决子阵列上的 Mongo 管道投影

我有以下文件

{
    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")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?