Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于elem的子文档数组Morphia查询_Java_Mongodb_Morphia - Fatal编程技术网

Java 基于elem的子文档数组Morphia查询

Java 基于elem的子文档数组Morphia查询,java,mongodb,morphia,Java,Mongodb,Morphia,我在mongodb集合“Contact”中有以下文档结构。有一个称为“数字”的子文档数组: 当我只想查询“家庭”和“商业”号码时,我可以在mongodb shell中执行以下操作: db.Contact.find({ numbers: { $elemMatch: { type : { $in : ["home", "business"]}, number: { $regex : "^012" } }}}); 但如何在morphia中做到这一点?有办法吗 我知

我在mongodb集合“Contact”中有以下文档结构。有一个称为“数字”的子文档数组:

当我只想查询“家庭”和“商业”号码时,我可以在mongodb shell中执行以下操作:

db.Contact.find({ numbers: { $elemMatch: { 
        type : { $in : ["home", "business"]}, 
        number: { $regex : "^012" }
}}});
但如何在morphia中做到这一点?有办法吗

我知道morphia支持“$elemMatch”。所以我可以这样做:

query.filter("numbers elem", ???);

<>但是,我如何为子文档添加组合查询?

,而不是使用MyMyA,考虑使用。它允许您在使用MongoDB shell时查询MongoDB。此外,在映射数组元素时,它将为您提供更多的自由。以下是jongo的示例:

contacts_collection.find("{numbers : {$elemMatch: {
                                         type: {$in :#},
                                         number: {$regex: #}  
                                                  }
                                     }
                          }", 
                         new String[]{"home", "business"}, "^012")
                   .as(Contact.class);
请注意,如果您只需要数组中的单个数字对象(或多个),则可以使用自定义结果映射器/处理程序。您只需将.as(Contact.class)替换为:

.map(new ResultHandler<Number>() {...})  
.map(新的ResultHandler(){…})

举一个完整的例子,看看我的或我的

已经太晚了,但也许其他人会发现它很方便

我找到了解决办法

.map(new ResultHandler<Number>() {...})  
query.filter("numbers elem", 
BasicDBObjectBuilder.start()
.push("type").add("$in", new String[]{"home", "business"}).pop()
.push("number").add("$regex", "^012").pop().get());