首页 > 解决方案 > 将 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 的类。

标签: ruby-on-railsrubymongodbmongoidmongomapper

解决方案


我能够通过使用 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

在这种情况下添加“存储”只是多余的。


推荐阅读