我试图通过使用MongoMapper的类继承来获得更好的组织结果,但是遇到了一些麻烦.
class Item
include MongoMapper::Document
key :name, String
end
class Picture < Item
key :url, String
end
class Video < Item
key :length, Integer
end
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,它们并没有完全返回我期望的内容.
>> Item.all
=> [#<Item name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Video.all
=> [#<Video name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, …Run Code Online (Sandbox Code Playgroud) 我有一个现有的生产Ruby/Rails应用程序,我希望随着时间的推移迁移到MongoDB,因为它不是一次只重写它的选项.我希望能够在我找到它们时弃用我的旧课程.我计划使用MongoMapper.我找不到任何人解释如何设置数据库配置文件以允许连接到一个应用程序中的两个数据存储的示例.
FWIW,我正在使用Rails 3.我很感激帮助.
我正在玩MongoMapper,但我无法弄清楚如何为嵌入文档的对象创建表单.
使用ActiveRecord,我会使用fields_for,但当被问及几个月前是否会支持这种情况时,MongoMapper的作者John Nunemaker写道:"不,不要.对于attr_accessor来说真的很难."
好的,公平的,但你怎么写这个表格来工作呢?
我对使用那里的嵌套表单实现不感兴趣,因为我想以"正常"方式执行此操作,因为我正在学习MongoMapper.
我的模型很简单 - 我有一个人员,其中包含电子邮件地址,电话号码等的嵌入式文档.我不关心更新现有的嵌入式文档.每次编辑Person时,都可以从表单输入中重新创建它们.
我正在尝试编写一个定义MongoMapper模型的插件.问题是,当我运行时script/console,我收到此错误:
/home/helder/.rvm/gems/ruby-1.8.7-p249/gems/mongo_mapper-0.8.2/lib/mongo_mapper/connection.rb:29:in
``database':NameError:MongoMapper :: Connection`中未初始化的类变量@@ database_name
这让我觉得它在设置数据库连接之前试图加载我的插件模型.如何在其余的应用程序代码之后加载插件?
有没有人有一个很好的MongoMapper文档资源?我一直在阅读mongoDB文档,但很多文件并没有转换为ruby/mm.我一直试图弄清楚如何做SELECT FROM WHERE EXISTS一点成功.
db.things.find( { a : { $exists : true } } ); // return object if a is present
唯一的文档,我迄今发现这些已帮助了一点.
谢谢.
我试图让MongoDB使用以下查询来插入多个记录,最终使用MongoMapper和Mongo ruby驱动程序.
db.foo.update({event_id: { $in: [1,2]}}, {$inc: {visit:1}}, true, true)
Run Code Online (Sandbox Code Playgroud)
如果所有记录都存在,则此方法可以正常工作,但不会为不存在的记录创建新记录.以下命令具有shell所需的效果,但从ruby驱动程序可能并不理想.
[1,2].forEach(function(id) {db.foo.update({event_id: id}, {$inc: {visit:1}}, true, true) });
Run Code Online (Sandbox Code Playgroud)
我可以循环遍历我想要在ruby中插入的每个id,但这样就需要为每个项目访问数据库.有没有办法从ruby驱动程序中只有一次数据库中的多个项目?这里的最佳做法是什么?使用mongomapper和ruby驱动程序,有没有办法在一个批处理中发送多个更新,生成如下所示的内容?
db.foo.update({event_id: 1}, {$inc: {visit:1}}, true); db.foo.update({event_id: 2}, {$inc: {visit:1}}, true);
Run Code Online (Sandbox Code Playgroud)
样本数据:
如果存在两条记录,则命令后的所需数据.
{ "_id" : ObjectId("4d6babbac0d8bb8238d02099"), "event_id" : 1, "visit" : 11 }
{ "_id" : ObjectId("4d6baf56c0d8bb8238d0209a"), "event_id" : 2, "visit" : 2 }
Run Code Online (Sandbox Code Playgroud)
如果存在两条记录,则命令后的实际数据
{ "_id" : ObjectId("4d6babbac0d8bb8238d02099"), "event_id" : 1, "visit" : 11 }
{ "_id" : ObjectId("4d6baf56c0d8bb8238d0209a"), "event_id" : 2, "visit" : 2 }
Run Code Online (Sandbox Code Playgroud)
如果仅存在具有event_id 1的记录,则命令后的所需数据.
{ …Run Code Online (Sandbox Code Playgroud) 有没有办法保存MongoMapper模型实例,以便不执行验证但调用回调?这与ActiveRecord相似whatever.save(false)
我在网上找到了一段代码,可以用来绕过验证和回调:
doc = whatever.to_mongo
Whatever.collection.save(doc, :safe => true)
Run Code Online (Sandbox Code Playgroud)
因此,如果有一种简单的方法来手动运行回调,我可以将其与上面的上述代码段一起使用.但这仍然是一种不太优雅和冗长的方式来做一些相对简单的事情 - 我希望有一种简单的方法构建到API中以跳过验证.
在文档中查询嵌入文档有什么好的模式?例如,我的用户文档有一个嵌入式警报文档.如果我想查看一个给定的用户是否有一个带有名字的警报,我可以用两种方式做到这一点,就我所知 - 在记忆中一个la
alert = current_user.alerts.select{|a| a.name == params[:name]}.first
或通过实际的文档界面la(请注意,我不是100%确定这在语义上是有效的,但你明白了):
User.where('alerts.name' => params[:name], :id => current_user.id).first
必须有更好的方式,比如
current_user.alerts.where(:name => params[:name])
也许?或者也许我只是没想到这个问题吧?
我正在尝试使用Mongo Mapper gem创建一个rails应用程序.我按照Mongo Mapper文档中的说明进行操作.
这是链接:Mongo Mapper Docs
首先,我生成了一个新的rails 4 app,不包括activerecord.
rails new my_app --skip-active-record
Run Code Online (Sandbox Code Playgroud)
在下一步中,我添加了gem'mongo_mapper'和gem'bson_ext',然后捆绑了.
下一步是生成config/mongo.yml文件.
当我尝试运行命令时:
script/rails generate mongo_mapper:config
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Could not find generator mongo_mapper:config.
目前没有关于使用Rails 4安装Mongo Mapper的信息,我不确定我是否遗漏了从Rails 3更改为4的内容.
如何让mongo mapper生成config/mongo.yml文件?
我有我的Yaml配置文件,mongo.yml:
development:
adapter: mongodb
database: fhsclock_development
host: localhost
port: nil
test:
adapter: mongodb
database: fhsclock_test
host: localhost
port: nil
production:
adapter: mongodb
database: fhsclock
hosts:
- - localhost
- nil
- - staff.mongohq.com
- 10015
Run Code Online (Sandbox Code Playgroud)
如何使用此文件进行MongoMapper的配置和连接?