2012-07-09 93 views
1
引用的对象排除字段查询

说我有两个类,如下所示:春数据蒙戈 - 从@DbRef

public class Person { 

    private String personId; 

    private String name; 

    private Address address; 

} 

public class Order { 

    private String orderId; 

    @DbRef 
    private Person customer; 

} 

我想什么做的是运行针对订单集合的查询,但只返回特定链接Person对象的领域,像:

public Order findByOrderId(String orderId) { 
    Query query = query(where("orderId").is(orderId)); 
    query.fields().exclude("person.address"); 
    return operations.findOne(query,Order.class); 
} 

我得到返回的数据,但我排除的说法似乎并不适用,如果它是通过跨越链接@DbRef子对象。我可以排除Order对象的属性没有问题。我遇到的问题是Person文档可能会变得很大,我想在获取Order对象时控制网络流量(即只根据需要获取数据)。

我使用的弹簧数据的MongoDB 1.0.0.M5版本

有谁知道是否支持这种操作的?

非常感谢

回答

2

这是目前不可能的。原因是我们使用fetch()方法透明地翻译了来自商店的对象,但不幸的是,该对象没有使用字段规范参数。我建议在MongoDB Java驱动程序的bug跟踪器中以及Spring Data MongoDB中打开一张票,让我们拿起它们可能引入的附加方法。

解决方法实际上可以将该对象映射为您的域类中的DBRef,并通过触发带有指定的嵌套排除项的findOne(…)手动将其解析为实际对象。

0

另一个解决办法可能是延长AbstractMongoEventListener并覆盖onAfterConvert方法并将其作为一个Spring bean

在这里,您将有机会获得订单对象,然后可以设置任何你不想空。

你仍然会得到空字段的默认值,但规模会小得多

或者,您也可以编写自定义PersonInfo类只有你所需要的字段并将其设置为Order对象,以及将Peson设置为空