java - 使用带有嵌套 $and 和 $or 条件的 Morphia 生成 Mongo 查询时出现的问题

标签 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}
                    ]
            }     ] }}

最佳答案

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

关于java - 使用带有嵌套 $and 和 $or 条件的 Morphia 生成 Mongo 查询时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327859/

相关文章:

java.time.DateTimeFormatter : Need ISO_INSTANT that always renders milliseconds

java - Mongo/Morphia 查询整个文档

java - 玩!集合(即集合或列表)字段中的 Morphia 查询

java - Lucene中的"createComponents"有时只被调用,为什么?

java - 如何通过比较 2 个 DatePickers 获得 BooleanBinding?

javascript - 从 mongodb 中的子文档数组中提取(除一个之外的所有)文档

MongoDB - 记录写入和读取查询

java - Morphia 0.110 找不到带有字符串 id 的引用

java - 需要在运行时用动态生成和编译的java .class文件替换运行时现有的类

node.js - MongoError : The 'cursor' option is required, 除了带有解释参数的聚合