需要基于表达式模式动态构建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}
]
} ] }}
答案 0 :(得分:0)
升级到吗啡1.5.0或更高版本可以解决此问题。从Morphia论坛获得了解决方案。 https://github.com/MorphiaOrg/morphia/issues/1278