Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Mongo数据库中克隆文档_Ruby On Rails_Ruby_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails 在Mongo数据库中克隆文档

Ruby on rails 在Mongo数据库中克隆文档,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我有一个mongodb数据库,我使用mongoid通过rails 3应用程序访问它。该数据库由大约10-15个集合组成。这些集合中的某些文档具有嵌入文档,其他文档通过id链接 我需要克隆数据库中的大部分数据以创建新记录。在我们的客户翻译这些新记录时,这些新记录需要与它们的克隆副本共存。这些新记录必须保持与以前相同的关系,但是新克隆的记录需要指向其新克隆的对应项 注意事项包括:许多具有“外键”的关系需要在克隆时更新。有些文档包含需要与其父文档一起克隆的嵌入文档。Clonee文档无论如何都无法与其克

我有一个mongodb数据库,我使用mongoid通过rails 3应用程序访问它。该数据库由大约10-15个集合组成。这些集合中的某些文档具有嵌入文档,其他文档通过id链接

我需要克隆数据库中的大部分数据以创建新记录。在我们的客户翻译这些新记录时,这些新记录需要与它们的克隆副本共存。这些新记录必须保持与以前相同的关系,但是新克隆的记录需要指向其新克隆的对应项

注意事项包括:许多具有“外键”的关系需要在克隆时更新。有些文档包含需要与其父文档一起克隆的嵌入文档。Clonee文档无论如何都无法与其克隆的文档关联

考虑的解决方案:第一种选择是复制数据库,并尝试合并不需要克隆的所有内容。可能有点混乱,我假设现有的ID也会被克隆。我考虑的第二个选项是编写一个脚本,该脚本将遍历每个Mongoid文档类并调用clone,但是我发现monogid.clone执行的是浅拷贝而不是深拷贝。因此,对于这个解决方案,我必须编写一个案例,在其中检测到嵌入式关系,以便执行深度复制。这也可能会变得一团糟


这里有没有我没有考虑过的选择?有没有更好的方法来实施其中一个经过考虑的解决方案?我反对吗?

看评论中的讨论,我会说如果.clone不起作用,你可以用属性、read\u属性、write\u属性方法以一种紧凑的方式轻松实现


我想你会被混乱的版本所困扰,每当我需要在MongoDB中复制东西的时候,我都会这么做。嘿@muistooshort,你是说使用.clone吗?如果
clone
没有处理嵌入的文档,那就变得更混乱,然后手工完成。我倾向于手工操作,但我不使用Mongoid。啊,好的。谢谢你澄清这一点。我会看看手工操作。是的,没有什么比SQL的
insert。。。在MongoDB中选择…
。至少我什么都不知道。
# Get the field values as a hash.
person.attributes

# Set the field values in the document.
Person.new(first_name: "Jean-Baptiste", middle_name: "Emmanuel")
person.attributes = { first_name: "Jean-Baptiste", middle_name: "Emmanuel" }
person.write_attributes(
  first_name: "Jean-Baptiste",
  middle_name: "Emmanuel"
)