克隆Mongo数据库中的文档

时间:2013-11-27 03:26:27

标签: ruby-on-rails ruby mongodb mongoid

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

我需要克隆数据库中的大部分数据来创建新记录。这些新记录需要与克隆的同行共存,同时由我们的客户翻译。这些新记录必须保持与之前相同的关系,但新克隆的记录需要指向新克隆的记录。

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

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

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

1 个答案:

答案 0 :(得分:0)

观看评论中的讨论,我会说如果.clone不起作用,您可以使用attributes,read_attribute,write_attribute方法以一种紧凑的方式轻松完成。 Excerpt from here

# 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"
)