使用spring的mongoTemplate或者如何在现有mongo文档上执行简单合并?
当我说合并时,我希望发生以下情况:
答案 0 :(得分:1)
如果您想使用MongoTemplate执行合并,您可以执行以下操作:
this.mongoTemplate.update**(<your_criteria>,
Update.fromDBObject(BasicDBObjectBuilder.start("$set",
<your_object>).get()), <output>.class)
样品:
BasicDBObject dbObject = new BasicDBObject("a", 1);
Query query = Query.query(Criteria.where("_id").is("123");
Update update = Update.fromDBObject(BasicDBObjectBuilder.start("$set",
dbObject).get());
this.mongoTemplate.updateFirst(query, update, BasicDBObject.class,
"my_collection");
您基本上使用$ set更新要传递的对象中的所有现有值。我不确定它是否是最优雅的方式,但效果很好。
我没有在这里介绍upsert案例,因为我假设你知道文档已经存在以便创建更新标准。
答案 1 :(得分:0)
您想要执行upsert,对吗? 这应该可以正常工作:
//suppose that you are trying to get user with Id=abs
Query query = new Query();
query.addCriteria(where(ID).is("abc"));
//and then you can add or update the new field (if the field does not exist, the template adds it into the document)
Update update = new Update();
update.set("addThisField", new Date());
mongo.upsert(query, update, User.class);
此查询基本上搜索id为“abc”的用户。如果用户具有名为 addThisField 的字段,则会执行更新。如果用户没有该字段,则会将该字段添加到文档中。
我用弹簧靴1.4测试了它