ruby-on-rails - 将 mongomapper 替换为 mongoid 并更新 mongo 驱动程序后无法正确读取集合
问题描述
MongoDB V3.2
升级了以下宝石:
Ruby Mongo Driver 从 1.11.1 到 2.10.4 + 依赖项 将 MongoMapper 0.13.1 替换为 Mongoid 5.4.1 + 依赖项
在这些更改之后,我立即注意到任何放置在可以在 MongoMapper 中显示数据的附加模块 (FolderModuleName::ClassName) 中的集合将不再显示任何数据。
唯一会显示数据的集合是那些没有任何模块的集合,例如看起来像此类 DataClass 的类。
解决方案
我能够通过使用 rails 控制台并使用 ruby mongo 驱动程序连接到我的数据库来解决问题。( https://docs.mongodb.com/ruby-driver/master/quick-start/ )
client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'dbname')
db = client.database
db.collections # returns a list of collection objects
db.collection_names # returns a list of collection names
在 rails 控制台中使用 db.collection_names 我可以看到任何带有模块的集合都保存为这样:
module_name.collection_name
升级后,我可以读取的唯一带有模块的集合名称是:
module_name_collection_name
有了这些信息,我将以下代码添加到受影响的 ruby 模型中:
store_in collection: 'module_name.collection_name'
这解决了我的问题。
不使用上面的代码就可以读取没有模块的集合的原因是集合名称被简单地存储为:
collection_name
在这种情况下添加“存储”只是多余的。
推荐阅读
- apache-spark - 启用 SSL 后,Spark UI 不使用 HTTPS,而是通过 HTTP 转发到端口 0
- jquery - .append()、选择列表和 Chrome 81 存在问题
- laravel - 如何防止 Vue 漏洞利用中的多次投票/快速点击?
- php - 致命错误:未捕获的错误:第 27 行在 null 上调用成员函数 prepare()
- c++ - 如何创建函数:使用文件名作为函数参数从 SD 卡文件中获取单个值
- python - 为大数据帧寻找更快的循环
- javascript - Amazon Mechanical Turk:如何使用 react/redux 实现 HIT?
- reactjs - 反应:引导模式不显示
- sql - 如何插入具有唯一标识 INT 列作为主键的表中
- php - 无法使用 CMD 使用 Composer 安装 google/cloud-spanner