已解决-使用带有嵌套$ and和$ or条件的Morphia生成Mongo查询的问题

时间:2019-05-27 14:20:03

标签: java mongodb-query morphia

需要基于表达式模式动态构建mongo查询。但是请注意,即使使用硬编码条件,构建的Morphia查询也会产生错误的结果

使用morphia-1.3.2.jar创建了BasicDAO。 使用System.out.println创建一个单元测试,并使用预期的条件构造一个查询。

System.out.println("Test Query" + 


    ((CriteriaContainerImpl) query1.and(
                                    query1.or(
                                                 query1.criteria("_id").equal("234"), query1.criteria("_id").equal("456")
                                              ),
                                    query1.and(
                                                query1.or(
                                                            query1.criteria("_id").equal("789"), query1.criteria("_id").equal("666")
                                                           ),
                                                query1.criteria("_id").equal("459")
                                                )
                                        )
                            )
                        .getQuery().toString());

实际结果:

{ query: { "_id" : "459", "$or" : [{ "_id" : "789" }, { "_id" : "666" }] }  }

这是上面打印声明的一部分产生的结果。

预期结果:

{query: 
{ "$and":[
            { "$or" : [{ "_id" : "234" }, { "_id" : "456" }] } ,
            {"$and":[
                { "$or" : [{ "_id" : "789" }, { "_id" : "666" }] },
                {"_id":459}
                    ]
            }     ] }}

1 个答案:

答案 0 :(得分:0)

升级到吗啡1.5.0或更高版本可以解决此问题。从Morphia论坛获得了解决方案。 https://github.com/MorphiaOrg/morphia/issues/1278