我試圖讓我已經更新對象的OBJECTID一個更新的對象的OBJECTID - 這是一個使用Java驅動程序我的Java代碼:Java驅動程序:如何獲得與MongoDB的updateFirst方法
Query query = new Query();
query.addCriteria(Criteria.where("color").is("pink"));
Update update = new Update();
update.set("name", name);
WriteResult writeResult = mongoTemplate.updateFirst(query, update, Colors.class);
Log.e("object id", writeResult.getUpsertedId().toString());
日誌消息返回null。我在mongolab上使用mongo服務器3.0,因爲我在免費層上,所以它不應該返回null。我蒙戈外殼也:
MongoDB的外殼版本:3.0.7
有沒有一種簡單的方法返回對象ID爲我剛剛更新了文檔?如果我無法返回upsertedId,getUpsertedId()方法的要點是什麼?
做我想做什麼,我現在必須發出兩個疑問這是非常麻煩的:
//1st query - updating the object first
Query query = new Query();
query.addCriteria(Criteria.where("color").is("pink"));
Update update = new Update();
update.set("name", name);
WriteResult writeResult = mongoTemplate.updateFirst(query, update, Colors.class);
//2nd query - find the object so that I can get its objectid
Query queryColor = new Query();
queryColor.addCriteria(Criteria.where("color").is("pink"));
queryColor.addCriteria(Criteria.where("name").is(name));
Color color = mongoTemplate.findOne(queryColor, Color.class);
Log.e("ColorId", color.getId());
按照大衛的回答,我甚至試過他的建議對模板而使用UPSERT,所以我改變代碼下面,它仍然不工作:
Query query = new Query();
query.addCriteria(Criteria.where("color").is("pink"));
Update update = new Update();
update.set("name", name);
WriteResult writeResult = mongoTemplate.upsert(query, update, Colors.class);
Log.e("object id", writeResult.getUpsertedId().toString());
這將是一個很好的答案,如果它有一個例子;) –
@Markus謝謝你,我自己並不是一個java人。如果你知道代碼,你可以編輯答案嗎? –
我認爲理論上這可行,但我不是100%確定的,因爲我最近沒有時間去測試它。我認爲java中的方法調用是findAndModify:http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoTemplate.html#findAndModify-org .springframework.data.mongodb.core.query.Query-org.springframework.data.mongodb.core.query.Update-org.springframework.data.mongodb.core.FindAndModifyOptions-java.lang.Class- – Simon