gpt4 book ai didi

java - 强制吗啡覆盖现有条目的干净方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:30:44 25 4
gpt4 key购买 nike

我正在从 sql DB 获取信息并使用 morphia 将它们转移到 mongo 中。我们检测 SQL 端的增量更改,并将更改的值导入 Monog,但我的第一次尝试没有成功,因为我最终在数据库中同时获得了旧条目和新条目,而不是将旧条目与新条目一起扔掉一个。

我的下一个方法是获取“sqlID”字段并用@id 标记它。这实现了我想要的,但它也阻止了 sqlid 被添加为普通字段。当我想查询 mongo 的 sqlID 时,查询不再起作用。

我发现的其他建议是对 mongo 进行查询以获取当前的@id,然后我可以保存它,并编写一个自定义查询来覆盖现有表中的每个字段(如果存在)。我不喜欢前一个选项,因为它需要对从 sql 中提取的每一行进行额外的 mongo 查询,而我正在使用的数据量太昂贵了。后者可以工作,但考虑到单个记录中有多少个字段,我真的不想手动编写查询来手动覆盖每个字段。

我当前的懒惰技巧是将 sqlID 保存两次,一次作为 @id,一次作为普通字段。它实现了我想要的功能,但仍然感觉很hack(如果我说它是的话,那就是一个词!)。

当您保存到 mongo 时,是否没有一些更简单的方法来指定字段并说“如果该字段已存在则覆盖”?

最佳答案

我只需在我的吗啡模型中创建一个专门的构造函数,它将数据库对象作为参数并在那里进行映射,例如

public MyModel(WhatEverDbObject rdbmsEntity){
this.idField = rdbmsEntity.sqlId;
// set the other fields as required
}

接下来,您可以迭代 RDBMS 中已更改的实体,只需将 RDBMS 实体传递给构造函数即可为 MongoDB 创建实体。保存它们应该像执行 updateFirst with createIfMissing set to true 一样简单,对 @Id 字段进行查询。

我不明白为什么不可能将您的 sqlID 用作@Id。请检查您的 sqlId 是否可以转换为您用于 @Id 的任何类型。如果有疑问,只需使用 String 就可以了。

关于java - 强制吗啡覆盖现有条目的干净方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com