如果新记录违反使用mongodb中的morphia的唯一键约束,是否有办法用新记录替换原始记录。
Upsert对我不起作用,因为在morphia中object_id为null,直到将其保存到数据库中,并且如果由于另一个字段而生成唯一键约束,则它无法进行upsert,因为新记录将具有不同的object_id然后是原始记录。
我不想从db查找原始记录,但只是在新记录创建唯一键约束时覆盖它,有没有办法做到这一点?
答案 0 :(得分:0)
我认为有三种可能的方法:
获取唯一元素的ObjectId,将其添加到新文档并保存。由于您正在重用ObjectId,因此旧元素将被覆盖。这需要两个查询,而不是一个。
创建更新查询,查询部分检查唯一属性并显式设置要更改的所有属性。这可以这样工作:
Query<User> updateQuery = datastore.createQuery(User.class)
.field("userId").equal("foo");
ops = datastore.createUpdateOperations(User.class).set("firstName", "bar");
datastore.update(updateQuery, ops);
通过@Id
注释将您的唯一属性用作您的ID。但是,存在一些(次要的)缺点:https://groups.google.com/forum/#!msg/morphia/GQLJywseiCM/6DVkYX17P68J
我会选择2。