Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 MongoDB/Morphia中特定子文档的查询_Java_Mongodb_Morphia_Querying_Nosql - Fatal编程技术网

Java MongoDB/Morphia中特定子文档的查询

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

我在MongoDB中存储了一个类似以下内容的文档:

{ '_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等,该怎么办?是否有通用的解决方案?