Java MongoDB/Morphia中特定子文档的查询
我在MongoDB中存储了一个类似以下内容的文档:Java MongoDB/Morphia中特定子文档的查询,java,mongodb,morphia,querying,nosql,Java,Mongodb,Morphia,Querying,Nosql,我在MongoDB中存储了一个类似以下内容的文档: { '_id' : 'XXX', 'myProps' : [ { '_id' : 'YYY', 'propA' : 'ValueA' }, { '_id' : 'ZZZ', 'propA' : 'ValueB' } ] } 我正在使用Morphia将其建模为Java对象。我想做的是查询myProps中propA值为'ValueA'的元素。这可能吗?是否可以在子文档中查询特定值?我尝试过使用如下查询: myProps.propA == 'Val
{ '_id' : 'XXX', 'myProps' : [ { '_id' : 'YYY', 'propA' : 'ValueA' }, { '_id' : 'ZZZ', 'propA' : 'ValueB' } ] }
我正在使用Morphia将其建模为Java对象。我想做的是查询myProps
中propA
值为'ValueA'
的元素。这可能吗?是否可以在子文档中查询特定值?我尝试过使用如下查询:
myProps.propA == 'ValueA'
…但是,我仍然看到myProps
的所有值被返回。我的问题中有什么遗漏吗?或者,使用Morphia/MongoDB进行这样的查询是不可能的
更新:到目前为止我的代码
我的实体和嵌入类:
@Entity
public class MyTestClass implements Serializable {
@Id
private ObjectId id;
@Embedded
private List<MyProps> myProps;
...
}
@Embedded
public class MyProps {
private String propA;
...
}
@实体
公共类MyTestClass实现了可序列化{
@身份证
私有ObjectId;
@嵌入
私人名单myProps;
...
}
@嵌入
公共类MyProps{
私有字符串propA;
...
}
我通过扩展BasicDAO为其创建了适当的DAO类。我的问题是:
Query<MyTestClass> q = this.myTestClassDAO.createQuery();
q.field("myProps.propA").qual("ValueA");
MyTestClass result = q.get();
Query q=this.myTestClassDAO.createQuery();
q、 字段(“myProps.propA”).qual(“ValueA”);
MyTestClass结果=q.get();
代码执行正确,但当我查看
result.getMyProps()
时,我看到一个列表,其中包含所有myProps
值,而不仅仅是那些使用fluent界面的propA='ValueA'
的值,它应该类似于字段(“myProps.propA”).equal(“ValueA”).field(“myProps.propA”).notEqual”(“ValueB”)
使用fluent界面,它应该是类似于字段(“myProps.propA”).equal(“ValueA”).field(“myProps.propA”).notEqual(“ValueB”)
你能显示你迄今为止尝试过的代码吗?你能显示你迄今为止尝试过的代码吗?正如你在我上面发布的代码中所看到的,这就是我正在尝试的。但是,我仍然看到实体类中返回了myProps的所有值。1)我假设.qual(
只是一个输入错误。请确保不要使用.equals(
,这是一个常见错误。2)等等,您想获取什么?您将获得所有与myProps.propA==ValueA
匹配的完整文档。如果您只想获取特定字段,请使用.retrievedFields(
是的,只是一个输入错误。对不起,我想获取所有具有propA==ValueA的myProps值。也就是说,我不想要任何具有propA==ValueB的值。我已更新了上面的查询,以显式排除ValueB的值,这很好,但是如果存在ValueC、ValueD等,该怎么办?有通用解决方案吗?如您所见在我上面发布的代码中,这就是我正在尝试的。但是,我仍然看到我的实体类中返回了myProps的所有值。1)我假设.qual(
只是一个输入错误。请确保不要使用.equals(
,这是一个常见错误。2)等等,您想获取什么?您将获得所有与myProps.propA==ValueA
匹配的完整文档。如果您只想获取特定字段,请使用.retrievedFields(
是的,只是一个输入错误。对不起,我想获取所有具有propA==ValueA的myProps值。也就是说,我不想要任何具有propA==ValueB的值。我已经更新了上面的查询,以显式排除ValueB的值,这很好,但是如果存在ValueC、ValueD等,该怎么办?是否有通用的解决方案?