2012-07-09 94 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設置爲空