需要根据表达式模式动态构造 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}
]
} ] }}
最佳答案
升级到 morphia 1.5.0 或更高版本可以解决此问题。从 Morphia 论坛得到了解决方案。 https://github.com/MorphiaOrg/morphia/issues/1278
关于java - 使用带有嵌套 $and 和 $or 条件的 Morphia 生成 Mongo 查询时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327859/