1

如果新记录违反了在 mongodb 中使用 morphia 的唯一键约束,有没有办法用新记录替换原始记录。

Upsert 对我不起作用,因为在 morphia 中 object_id 为空,直到它保存到数据库中,如果由于另一个字段而生成唯一键约束,则它不能执行 upsert,因为新记录将具有不同的 object_id 然后原始记录。

我不想从 db 中查找原始记录,但如果新记录创建唯一键约束,只需覆盖它,有没有办法做到这一点?

4

1 回答 1

0

我认为有3种可能的方法:

  1. 获取唯一元素的 ObjectId,将其添加到新文档并保存。由于您正在重用 ObjectId,因此旧元素将被覆盖。这需要两个查询而不是一个。

  2. 创建一个更新查询,其中查询部分检查唯一属性并显式设置要更改的所有属性。这将像这样工作:

    Query<User> updateQuery = datastore.createQuery(User.class)
        .field("userId").equal("foo");
    ops = datastore.createUpdateOperations(User.class).set("firstName", "bar");
    datastore.update(updateQuery, ops);
    
  3. @Id通过注释使用您的唯一属性作为您的 ID 。但是,有一些(次要)缺点:https ://groups.google.com/forum/#!msg/morphia/GQLJywseiCM/6D​​VkYX17P68J

我会选择选项2。

于 2012-12-25T21:40:20.847 回答