Java 基于elem的子文档数组Morphia查询
我在mongodb集合“Contact”中有以下文档结构。有一个称为“数字”的子文档数组: 当我只想查询“家庭”和“商业”号码时,我可以在mongodb shell中执行以下操作: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中做到这一点?有办法吗 我知
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());