MongoDB如何将带有表达式的switch / case转换为java驱动语法?

时间:2017-07-18 14:02:15

标签: java mongodb switch-statement

我有一个根据当前文档中某些条件计算的投影字段。本机mongo查询工作正常。但是我无法在java驱动程序3.4中实现查询。只有java驱动程序3.4语法是相关的。

来自开关的字段结果的投影代码是:

"SITUACAO": {
"$switch" : {
    "branches": [
        { case: {"$eq": ["$ID_STATUSMATRICULA", 0]},
          then: {
                "$switch" : {
                    "branches": [
                        { case: {"$and": [{"$eq": ["$NR_ANDAMENTO", 0 ] },
                                          {"$eq": ["$ID_STATUSMATRICULA", 0]} ] }, then: "NAOINICIADO" },

                        { case: {"$and": [{"$gt": ["$NR_ANDAMENTO", 0]},
                                          {"$lte": ["$NR_ANDAMENTO", 100]},
                                          {"$eq": ["$ID_STATUSMATRICULA", 0]} ] }, then: "EMANDAMENTO" }
                    ],
                    "default": "--matriculado--"
                }
            }
        },
        { case: {"$eq": ["$ID_STATUSMATRICULA", 1]},
          then: {
                "$switch" : {
                    "branches": [
                        { case: {"$and": [ {"$eq": ["$ID_STATUSMATRICULA", 1]},
                                           {"$in": ["$ID_STATUSAPROVEITAMENTO", [1] ]} ] }, then: "APROVADO" },
                        { case: {"$and": [ {"$eq": ["$ID_STATUSMATRICULA", 1]},
                                           {"$in": ["$ID_STATUSAPROVEITAMENTO", [2] ]} ] }, then: "REPROVADO" },
                        { case: {"$and": [{"$eq": ["$ID_STATUSMATRICULA", 1]},
                                          {"$in": ["$ID_STATUSAPROVEITAMENTO", [0] ]} ] }, then: "PENDENTE" },
                        { case: {"$and": [ {"$eq": ["$ID_STATUSMATRICULA", 1]},
                                           {"$in": ["$ID_STATUSAPROVEITAMENTO", [1,2] ]} ] }, then: "CONCLUIDO" }
                    ],
                    "default": "--concluido--"
                }
            }
        }
    ],
    "default": "--indefinida--"
}

}

围绕$和内部案例陈述的部分我可以这样绘制:

    List<Document> docs = new ArrayList<>();
    docs.add( new Document("$eq", asList("$NR_ANDAMENTO", 0)) );
    docs.add( new Document("$eq", asList("$ID_STATUSMATRICULA", 1)) );
    Document doc = new Document("$and", docs);

但是,结构$ switch / branches [] / case ...很难找到写入的方法。 任何人都有这样的例子或写这个的想法吗? 感谢

0 个答案:

没有答案