2015-10-13 41 views
0

我在使用Java Spring存儲庫(these ones)時遇到了一些問題。我有一個具有自定義ID字段的集合(因爲我的應用程序中存在一個限制,使我無法使用MongoDB ObjectID)以及一些數據。看起來,CrudRepository接口中內置的save()方法只會在使用ObjectID進行保存時對數據庫對象進行更新,否則會添加對象的新實例。由於我使用自定義ID字段,這似乎意味着我必須先刪除舊對象(如果存在),然後插入帶有更新字段的全新對象。很明顯,這是非常緩慢的(我必須做3個數據庫調用:一個查看對象是否存在,一個刪除它,一個插入它,而不是1),所以我想確保:使用Java Spring存儲庫更新MongoDB集合

有沒有辦法使用Java Spring存儲庫在不使用對象的ObjectID的情況下對集合進行更新?謝謝。

回答

0

可以使用MongoOperations API,

http://docs.spring.io/spring-data/data-mongo/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html#findAndModify-org.springframework.data.mongodb.core.query.Query-org.springframework.data.mongodb.core.query.Update-java.lang.Class-

就自動裝配的mongoOperation自定義蒙戈DAO實現,你可以使用此代碼

mongoOperation.findAndModify(Query query, Update update,Class<T> entityClass) 

查詢中包含的標準,該更新包含您要應用的更改以及entityClass與mongo文檔有關的更改。

您也可以按照其他類似的操作在本教程中

http://www.mkyong.com/mongodb/spring-data-mongodb-update-document/

+0

感謝您的回答!問題是MongoRepository還有另一個功能,我想在我的應用程序中利用MongoOperations(和MongoTemplate)似乎不允許的功能,所以我需要使用MongoRepository。我明白,儘管使用其他方法,這是相對微不足道的。 – Ertai87

+0

請你詳細說明一下嗎? – vine

+0

實際上使用mongoOperation並不禁止你繼續使用MongoRepository。實際上,MongoRepository在內部使用了mongoOperations。因此,對於更多受控的操作,Spring Data有意設計爲暴露MongoOperations以在自定義dao impl模式中使用它。請遵循這裏的相關討論,http://stackoverflow.com/questions/17035419/spring-data-mongodb-custom-implementation-propertyreferenceexception 請注意,該示例使用MongoTemplate,它也與MongoOperation相同,因爲MongoTemplate是一個子類MongoOperation的 – vine