直接加载嵌入式类而不使用Morphia中的嵌入类

时间:2017-05-04 18:22:03

标签: java mongodb mongodb-query morphia

我有以下两个简单的类,它们是我问题结构的典范:

第一个类,嵌入第二个

@Entity
public class MyClass {
    @Id
    private String myClassName;
    private String otherField;
    @Embedded
    private List<MyEmbedded> myEmbeddeds;
}

将嵌入第二类:

@Embedded
public class MyEmbedded {
    @Id
    private String name;
    private String some;
    private String other;
}

在实际情况中,两个类都有一个更复杂的结构,有更多的字段和引用。 因此,我不想加载整个MyClass对象,因为在大多数情况下我只需要MyEmbedded列表中的一个特定元素(在大多数情况下具有只读访问权限)。

另一方面,将MyEmbedded类设置为简单引用是没有选择的,因为我们对MyClass有一些复杂的查询,这些查询严重依赖于myEmbeddeds,这意味着我们必须执行多个查询,这是不想要。

所以,主要问题是:

如何直接将myEmbeddeds列表的一个特定元素作为MyEmbedded-object加载,而不加载“父”对象?

使用AggregationPipeline可能有办法吗? (你可以在pipeline.aggregate()方法中定义一个“目标”类,你可以在morphia的测试中找到一些例子,你可以看到here,但我没有得到适用于我的情况)

1 个答案:

答案 0 :(得分:0)

您可以根据MyClass的属性查询MyEmbedded,然后使用投影仅从结果中提取myEmbeddeds