我使用的是rails 3,我的应用程序是从ActiveRecord开始的.现在,我有很多模型,它们之间的关系开始变得复杂,有些可以用面向文档的 struct 更简单地表达,所以我想try 迁移到MongoDB并使用Mongoid.

我一直听说,您不必全部使用MongoDB或什么都不使用,但可以在迁移时并行使用这两个.不过,我不知道如何从文件中了解这一点.

例如,我有:

class User < ActiveRecord::Base
   has_many :items
   has_many :products, :through => :items
end

class Product < ActiveRecord::Base
   has_many :items
end

class Item < ActiveRecord::Base
   belongs_to :user
   belongs_to :product

   # alot of data that fits a hierarchical document-oriented structure
end

理想情况下,我希望首先用Mongoid文档替换我的Item activerecord模型,这样我的项目就存储在MongoDB中,我的UsersProducts就可以保存在我的SQL数据库中

问题是,我不知道该怎么做.我这样做对吗?

也许另一种 Select 是保留基本AR项目

class Item < ActiveRecord::Base
   has_one :mongodb_item  ?? # I know this is wrong
end

class MongodbItem
   include Mongoid::Document
   belongs_to AR_Item ???    # I know this is also wrong
end

谢谢

推荐答案

我不明白为什么你不能在同一个应用程序中使用both个ActiveRecord和Mongoid模型.尽管如此,我几乎可以肯定,如果你试图在ActiveRecord和Mongoid模型之间建立关系,你会遇到问题.

如果你的ActiveRecord模型是高度相关的,但更适合文档 struct ,那么我建议你咬紧牙关,把它们全部转换成Mongoid文档.我最近不得不在一个(大型的)项目中这样做,它的压力比你想象的要小得多.

如果你的模型有很好的单元测试,那么它应该是一个完整的快照.如果你没有——先编写单元测试,确保它们通过ActiveRecord,然后开始将东西迁移到Mongoid.

Mongodb相关问答推荐

Mongodb如果数组中有外部键,则将排序应用到查找结果

为什么AllowDiskUse不能在$GROUP阶段的聚合管道中工作?

用其他集合中的文档替换嵌套文档数组中的值

MongoDB中的字符串聚合

MongoDB v4.4聚合的$getfield替代方案

如何在Golang保存到MongoDB时排除空数据值的问题?

MongoDB $lookup 查找字段值数组

DTO 验证适用于 POST,但不适用于 PUT

MongoDb $filter,然后获取非重复计数

findOneAndUpdate 和 findOneAndReplace 有什么区别?

MongoDB 的 Java 语法

MongoDB:设置 Windows 服务

从 mongodb 中的副本配置重新开始

如何在任意深度查找 MongoDB 字段名称

mongo - 如何查询嵌套的 json

如何在mongoose中加入两个集合

从 id 删除 PyMongo 中的文档

是否有支持 MongoDB 和 Devise 的 Rails 管理界面?

如何在 Ubuntu 上安装 mongodb-clients 最新版本?

MongoDB:聚合框架: $match between fields