Query for specific subdocuments in MongoDB/Morphia

1k Views Asked by At

I have a document stored in MongoDB that looks something like this:

{ '_id' : 'XXX', 'myProps' : [ { '_id' : 'YYY', 'propA' : 'ValueA' }, { '_id' : 'ZZZ', 'propA' : 'ValueB' } ] }

I'm using Morphia to model this into Java objects. What I would like to do is query for elements within myProps that have a propA value of 'ValueA'. Is this possible? Is it possible to query for specific values within a subdocument? I've tried using queries like:

myProps.propA == 'ValueA'

...but, I still see all values of myProps being returned. Is there something I'm missing in my query? Or is it not possible to make such a query using Morphia/MongoDB?

UPDATE: My code thus far...

My entity and embedded classes:

@Entity
public class MyTestClass implements Serializable {

   @Id
   private ObjectId id;

   @Embedded
   private List<MyProps> myProps;

   ...

}

@Embedded
public class MyProps {

  private String propA;

  ...

}

I have created the appropriate DAO class for it by extending BasicDAO. Here is my query:

Query<MyTestClass> q = this.myTestClassDAO.createQuery();
q.field("myProps.propA").qual("ValueA");

MyTestClass result = q.get();

The code executes correctly, but when I look at result.getMyProps() I see a list containing ALL of the myProps values, not just the ones with propA == 'ValueA'.

1

There are 1 best solutions below

6
On

Using the fluent interface it should be something like field("myProps.propA").equal("ValueA").field("myProps.propA").notEqual("ValueB").