Java 强制morphia覆盖现有条目的干净方法
我正在从一个sql数据库获取信息,并使用morphia将它们移动到mongo中。我们在SQL端检测增量更改,并将更改的值导入Monog,但我的第一次尝试没有成功,因为我在DB中同时使用了旧条目和新条目,而不是将旧条目与新条目一起丢弃 我的下一个方法是获取“sqlID”字段并用@id标记它。这满足了我的要求,但也阻止了将sqlID添加为普通字段。当我想在mongo中查询sqlID时,查询就不再有效了 我发现的其他建议是对mongo进行查询,以获取当前的@id,然后将其保存,并编写一个自定义查询,覆盖现有表中的每个字段(如果存在)。我不喜欢前一个选项,因为它需要对我从sql中提取的每一行进行额外的mongo查询,而我使用的数据量太昂贵了。后者可以,但考虑到一条记录中有多少字段,我真的不想手动写出一个查询来覆盖每个字段 我目前的懒惰做法是将sqlID保存两次,一次作为@id,一次作为普通字段。它做了我想做的,但仍然感觉像黑客(如果我说是的话,这是一个词!)Java 强制morphia覆盖现有条目的干净方法,java,mongodb,morphia,Java,Mongodb,Morphia,我正在从一个sql数据库获取信息,并使用morphia将它们移动到mongo中。我们在SQL端检测增量更改,并将更改的值导入Monog,但我的第一次尝试没有成功,因为我在DB中同时使用了旧条目和新条目,而不是将旧条目与新条目一起丢弃 我的下一个方法是获取“sqlID”字段并用@id标记它。这满足了我的要求,但也阻止了将sqlID添加为普通字段。当我想在mongo中查询sqlID时,查询就不再有效了 我发现的其他建议是对mongo进行查询,以获取当前的@id,然后将其保存,并编写一个自定义查询,覆
在保存到mongo时,是否有更简单的方法来指定字段并说“如果此字段已存在,则覆盖”呢?我只需在我的morphia模型中创建一个专门的构造函数,它将DB对象作为参数,并在那里进行映射,例如
public MyModel(WhatEverDbObject rdbmsEntity){
this.idField = rdbmsEntity.sqlId;
// set the other fields as required
}
接下来,您可以迭代RDBMS中更改的实体,只需将RDBMS实体传递给构造函数,即可为MongoDB创建实体。保存它们应该和在@Id字段上进行查询一样简单
我不明白为什么不能将您的sqlID用作@Id。请检查您的sqlID是否可以转换为您用于@Id的任何类型。如果有疑问,只需使用字符串,它就可以工作。我可以使用sqlID作为mongo Id。我的问题是,如果将Id标记为mongo Id,它将以不同的方式保存Id。如果我向其添加mongo Id,则不再创建sqlID字段,也不再有任何方法基于结果mongo db中的sqlID进行提取。