如果新记录违反了morphia中的唯一键约束,则使用新记录更新原始记录?

时间:2012-12-25 13:54:07

标签: mongodb morphia mongodb-java

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  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/6DVkYX17P68J

  4. 我会选择2。