如果新记录违反了在 mongodb 中使用 morphia 的唯一键约束,有没有办法用新记录替换原始记录。
Upsert 对我不起作用,因为在 morphia 中 object_id 为空,直到它保存到数据库中,如果由于另一个字段而生成唯一键约束,则它不能执行 upsert,因为新记录将具有不同的 object_id 然后原始记录。
我不想从 db 中查找原始记录,但如果新记录创建唯一键约束,只需覆盖它,有没有办法做到这一点?
如果新记录违反了在 mongodb 中使用 morphia 的唯一键约束,有没有办法用新记录替换原始记录。
Upsert 对我不起作用,因为在 morphia 中 object_id 为空,直到它保存到数据库中,如果由于另一个字段而生成唯一键约束,则它不能执行 upsert,因为新记录将具有不同的 object_id 然后原始记录。
我不想从 db 中查找原始记录,但如果新记录创建唯一键约束,只需覆盖它,有没有办法做到这一点?
我认为有3种可能的方法:
获取唯一元素的 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。