【发布时间】:2017-02-08 21:55:55
【问题描述】:
我正在尝试获取我已更新的对象的 objectId - 这是我使用 java 驱动程序的 java 代码:
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 server 3.0,因为我在免费层上,所以它不应该返回 null。我的 mongo shell 也是:
MongoDB shell 版本: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());
【问题讨论】: