2013-09-06 3 views
0

У меня есть документ, хранящийся в MongoDB, который выглядит примерно так:запросов для конкретных поддокументами в MongoDB/Морфий

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

Я использую морфий для моделирования этого в объекты Java. Я хотел бы сделать запрос для элементов в пределах myProps, которые имеют значение propA'ValueA'. Это возможно? Можно ли запрашивать определенные значения внутри поддокумента? Я попытался с помощью запросов, как:

myProps.propA == 'ValueA' 

... но я до сих пор вижу все значения myProps возвращаются. Есть что-то, что мне не хватает в моем запросе? Или невозможно сделать такой запрос с помощью Morphia/MongoDB?

UPDATE: Мой код до сих пор ...

Мои сущности и встроенные классы:

@Entity 
public class MyTestClass implements Serializable { 

    @Id 
    private ObjectId id; 

    @Embedded 
    private List<MyProps> myProps; 

    ... 

} 

@Embedded 
public class MyProps { 

    private String propA; 

    ... 

} 

Я создал соответствующий класс DAO для него путем расширения BasicDAO. Вот мой запрос:

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

MyTestClass result = q.get(); 

код правильно выполняется, но когда я смотрю на result.getMyProps() я вижу список, содержащий все myProps значений, а не только те, с propA == 'ValueA'.

+0

Можете ли вы показать код, который вы пробовали до сих пор? – evanchooly

ответ

0

Используя свободный интерфейс, он должен быть чем-то вроде field("myProps.propA").equal("ValueA").field("myProps.propA").notEqual("ValueB").

+0

Как вы можете видеть в коде, опубликованном выше, это то, что я пытаюсь. Тем не менее, я все еще вижу ВСЕ значения myProps, возвращаемые в классе сущности. – Shadowman

+0

1) Я предполагаю, что '' .qual ('' это просто опечатка. Не забудьте использовать '.equals (' ', что является общей ошибкой. 2) Подождите, что вы пытаетесь получить? все полные документы с любым совпадением для '' myProps.propA == ValueA''. Если вы хотите получить только определенные поля, используйте '.retrievedFields (' ' – xeraa

+0

Да, просто опечатка. Извините, я хочу получить все значения myProps, которые имеют propA == ValueA. То есть, я НЕ хочу с propA == ValueB. – Shadowman