什么';在MongoDB中,重构嵌入到引用或重构嵌入到引用的最简单方法是什么?

什么';在MongoDB中,重构嵌入到引用或重构嵌入到引用的最简单方法是什么?,mongodb,refactoring,Mongodb,Refactoring,假设我有一个现有的数据集,其中某个内容是一个嵌入的文档,但我们希望将其转换为引用。有没有什么自动或半自动的方法来进行重构。重构本身很简单。只需将“embeddes_one”替换为“has_one”(或者用适当的术语替换映射器库)。数据迁移会带来一些痛苦。也许不会。这是我在不到10分钟内编写的一个小ruby脚本。它应该能满足我认为你需要的 source\u集合='users' 字段\到\展开='地址' 父字段='user\u id' 扩展的_集合='地址' 需要“mongo” db=Mongo::

假设我有一个现有的数据集,其中某个内容是一个嵌入的文档,但我们希望将其转换为引用。有没有什么自动或半自动的方法来进行重构。

重构本身很简单。只需将“embeddes_one”替换为“has_one”(或者用适当的术语替换映射器库)。数据迁移会带来一些痛苦。也许不会。这是我在不到10分钟内编写的一个小ruby脚本。它应该能满足我认为你需要的

source\u集合='users'
字段\到\展开='地址'
父字段='user\u id'
扩展的_集合='地址'
需要“mongo”
db=Mongo::Connection.new.db('test')
users=db.collection(源集合)
地址=数据库集合(扩展集合)
#准备测试数据
users.remove()
地址。删除()
users.insert({姓名:'Joe',地址:{城市:'Rio de Janeiro'}})
users.find().to_a#=>[{“\u id”=>BSON::ObjectId('50614e910ed4c08a6a000001'),“name”=>“Joe”,“address”=>{“city”=>“Rio de Janeiro”}]
users.find()。每个|
#将子文档移动到单独的集合
addr=u[字段要展开]
addr[parent_field]=u[''u id']
地址。插入(地址)
#从原始文档中删除
update({u id:u[''u id']},{'$unset'=>{field\u to_expand=>1})
结束
users.find().to_a#=>[{“_id”=>BSON::ObjectId('50614e910ed4c08a6a00001'),“name”=>“Joe”}]
addresses.find().to_a#=>[{“_id”=>BSON::ObjectId('50614e910ed4c08a6a000002'),“city”=>“Rio de Janeiro”,“user_id”=>BSON::ObjectId('50614e910ed4c08a6a000001')]

重构本身很简单。只需将“embeddes_one”替换为“has_one”(或者用适当的术语替换映射器库)。数据迁移会带来一些痛苦。也许不会。这是我在不到10分钟内编写的一个小ruby脚本。它应该能满足我认为你需要的

source\u集合='users'
字段\到\展开='地址'
父字段='user\u id'
扩展的_集合='地址'
需要“mongo”
db=Mongo::Connection.new.db('test')
users=db.collection(源集合)
地址=数据库集合(扩展集合)
#准备测试数据
users.remove()
地址。删除()
users.insert({姓名:'Joe',地址:{城市:'Rio de Janeiro'}})
users.find().to_a#=>[{“\u id”=>BSON::ObjectId('50614e910ed4c08a6a000001'),“name”=>“Joe”,“address”=>{“city”=>“Rio de Janeiro”}]
users.find()。每个|
#将子文档移动到单独的集合
addr=u[字段要展开]
addr[parent_field]=u[''u id']
地址。插入(地址)
#从原始文档中删除
update({u id:u[''u id']},{'$unset'=>{field\u to_expand=>1})
结束
users.find().to_a#=>[{“_id”=>BSON::ObjectId('50614e910ed4c08a6a00001'),“name”=>“Joe”}]
addresses.find().to_a#=>[{“_id”=>BSON::ObjectId('50614e910ed4c08a6a000002'),“city”=>“Rio de Janeiro”,“user_id”=>BSON::ObjectId('50614e910ed4c08a6a000001')]