ruby-on-rails - 如何将 embeds_many / embedded_in 存储在 mongoid 中作为哈希而不是数组?
问题描述
当我为现有的遗留系统构建新的 API 时,我试图弄清楚如何以对 ODM 有意义的方式对关系进行建模,但要保持与现有的存储结构相同的存储结构。
当前结构存储为:
{
_id: ObjectId(),
name: String,
relationship_ids: {
"5c06a0eb350e6ef20d1486b9" : {
"id" : "5c06a0eb350e6ef20d1486b9",
"type" : "package"
},
"5ba105bf350e6e3f6ef97532" : {
"id" : "5ba105bf350e6e3f6ef97532",
"type" : "something"
}
}
}
而且我想对对象进行建模,就好像它是 Rails 中自己的模型一样。我想也许有办法做到这一点,但我在任何地方都看不到。
我猜我需要某种序列化/反序列化适配器或专门在embedded_in do
/embeds_many do
区域覆盖它......但不确定。
更新:
我猜它以某种方式与这种覆盖方法有关: https ://docs.mongodb.com/mongoid/7.0/api/Mongoid/Association/Embedded/EmbedsMany/Proxy.html
但是我对此有些陌生,并且不知道放置这种覆盖的最佳位置在哪里。
还有其他人对此有解决方案吗?
解决方案
您可能可以使用多态关联(请参阅文档“Polymorphism”):
class Band
include Mongoid::Document
embeds_many :photos, as: :photographic
end
class Photo
include Mongoid::Document
embedded_in :photographic, polymorphic: true
end
class Image
include Mongoid::Document
embedded_in :photographic, polymorphic: true
end
多态关系存储相关文档的 id 和类名。
推荐阅读
- python - 尽管修改了 sys.path 标准库包仍然可以导入
- java - JDBC休眠结果集不会访问任何列
- regex - 如何在 FILTER 函数中使用 SEARCH 函数
- excel - 如何在不知道名称 vba 的情况下调用工作簿
- python - 如何修复(Zlib 错误:解压缩数据时:流状态不一致)
- python - 在具有多个数据集的python中绘制热图
- ios - Xcode基于Target的共享框架条件编译
- pandas - Pandas 表达式导致列爆炸(或如何在重名环境中删除包含子字符串的列)
- java - 无法为 ListView 设置 onItemClickListener
- ionic3 - 我们如何浏览页面,以便我们可以从同一页面创建页面的新对象