与mongoid一起使用的最佳状态机宝石是什么?
state-machine ruby-on-rails-plugins mongoid mongodb-ruby ruby-on-rails-3
我有这个结构
class House
include Mongoid::Document
embeds_many :inhabitants
end
class Inhabitant
include Mongoid::Document
embedded_in :house
field :name
field :gender
field :age
end
Run Code Online (Sandbox Code Playgroud)
我可以得到所有女性居住的房屋:
houses = House.where("inhabitants.gender" => "female")
Run Code Online (Sandbox Code Playgroud)
但是,如何才能获得50岁以下女性居住的所有房屋?如何为嵌入对象指定多个条件?
你如何在mongoDB中的文档中存储开放时间,比如使用Mongoid可以轻松查询?我已经读过这个帖子,但我不确定如何根据我的需要实现它.
我需要能够每天添加多个打开和关闭时间,因为图书馆应该能够在白天关闭几个小时然后重新打开.
我需要能够在这些开放时间添加例外.例如; 在特定日期关闭星期一.
请分享一些关于如何以最灵活的方式做到这一点的最佳实践和经验.
在我的rails应用程序中,我想要获取具有唯一值的10个最后记录.
我试过了:
@users = User.all(:limit => 10, :sort => [:created_at, :desc]).map{|t| t.first_name}.uniq
Run Code Online (Sandbox Code Playgroud)
但,
限制不能像我期望的那样工作..
我希望'limit'能够最后影响查询.
有任何想法吗?
我使用Rails 3.2.2与mongoid 2.4.6.为了保持我的集合小,我使用"store_in"语句将子对象存储在sepparate集合中的基类中.我的代码看起来像这样:
class BaseClass
include Mongoid::Document
end
class ChildClass1 < BaseClass
store_in :child_1
end
class ChildClass2 < BaseClass
store_in :child_2
end
Run Code Online (Sandbox Code Playgroud)
似乎对象随机存储在或其他子集合中.Child1类型的对象有时会存储在集合Child2中.这是我在日志中看到的令人惊讶的事情:
Started POST "/child_class_1" for 127.0.0.1 at 2012-05-22 10:22:51 -0400
Processing by ChildClass1Controller#create as HTML
MONGODB (0ms) myproject_development['child_2'].insert....
Run Code Online (Sandbox Code Playgroud)
它来自哪里?这是mongoid,rails还是mongodb中的错误?
inheritance ruby-on-rails multiple-inheritance mongodb mongoid
有没有办法找到我的rails应用程序中的所有Mongoid模型名称.我可以通过获取app/models文件夹中的所有文件找到所有模型,但我特别想要mongoid模型名称.
https://github.com/memphis518/Garden-Dating-Service
上面的公共仓库是我们正在为奥斯汀社区花园工作的社区编码项目,到目前为止它是一个相当简单的项目,但由于某种原因rake db:seed不起作用("不知道如何构建任务db:seed" ),当你运行rake -T它时,根本没有显示任何佣金任务.
MongoID文档说它提供了大多数与DB相关的常见rake任务 - 我无法弄清楚为什么它们不在那里.
一些背景:
我通过mongo-elasticsearch河将MongoDB与ElasticSearch结合使用.在Elasticsearch中,我希望我的文档结构如下所示:
{
"_id": "SomeId-AnotherId",
... // all the other lovely denormalized data
}
Run Code Online (Sandbox Code Playgroud)
SomeId-AnotherId是我在对数据进行非规范化时创建的.我需要这种结构的原因是我需要能够说http://elasticsearch/index/type/SomeId-AnotherId要检索文档.
我对我的数据进行了非规范化(一个C#应用程序),然后我插入MongoDB(这些数据然后通过河流进入ES,如上所述).当我插入MongoDB时,我目前的印象是我需要在我的模型上设置一个BsonId,Mongo用它来索引文档.这可以是ObjectId或任何其他类型,如string或int等,只要我添加[BsonId]属性.
我的模型看起来像这样:
public class Model {
[BsonId]
public string Id {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我这样设置:
model.Id = string.format("{0}-{1}", someId, anotherId);
Run Code Online (Sandbox Code Playgroud)
问题
目前我看到大约1,500个文件从〜10,000的插入进入Mongo.我看了一下我为模型对象生成的id,肯定有超过12个字节.mongo会拒绝那些而不是写它们吗?
Bson Id是12字节 - 这是否意味着如果我创建自己的ID(格式为:"SomeId-AnotherId"),它也应该只有12个字节长?无论如何围绕这个?
我不想对这些文档使用mongos默认的objectId,因为如上所述,一旦doc在elasticsearch中,我希望能够以特定的方式获取文档(在URI中使用"SomeId-AnotherId").
最后的笔记:
我知道我可以在我的模型中添加另一个ID属性,例如ElasticId,然后配置Elasticsearch来查找此属性并将其用作elasticsearch文档的_id.如果我这样做,那么我可以使用Mongos默认ID,一切都会好的.但是,我会牺牲弹性搜索性能,我还需要在弹性搜索中存储一个我不想要的额外字段.
对不起大规模的脑转储顺便说一下!! :)
我有一个相当简单的mongodb模型目前2个系列学生课程(嵌入主题)
class Student < User
include Mongoid::Document
has_many :courses
class Course
include Mongoid::Document
belongs_to :student
embeds_many :subjects
Run Code Online (Sandbox Code Playgroud)
我知道mongoid不支持直接查询has_many即
Student.courses
Run Code Online (Sandbox Code Playgroud)
因此,如果我想获得学生科目,这是唯一的方法
@student = Student.first
Course.find(@student.courses).subjects
Run Code Online (Sandbox Code Playgroud)
这目前有3个查询
MOPED: 127.0.0.1:27017 QUERY database=test collection=users selector= {"$query"=>{"_type"=>{"$in"=>["Student"]}}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (1.1775ms)
MOPED: 127.0.0.1:27017 QUERY database=test collection=courses selector={"student_id"=>"51f09457b5b605db25000002"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.8862ms)
MOPED: 127.0.0.1:27017 QUERY database=test collection=courses selector={"_id"=>"51f09457b5b605db25000003"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.8380ms)
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?我知道我可以在课程中嵌入课程,但我也会直接查询课程集.
我克隆rails app(我们的公司项目),然后安装与mongo db和mongoid gem相关的所有内容.然后我运行rake db:setup然后运行rails s.它工作正常,我可以访问所有网站,并做一切.但我在rails控制台遇到了问题.
每当我这样做:
铁轨
然后
User.first
Run Code Online (Sandbox Code Playgroud)
我会得到这个错误
加载开发环境(Rails 4.1.1)irb(main):001:0> User.first Mongoid :: Errors :: NoSessionConfig:问题:找不到名为"default"的会话的配置.简介:
尝试创建新会话时,Mongoid无法找到名称的会话配置:'default'.这是了解连接所需的主机,端口和选项所必需的.解决方法:仔细检查您的mongoid.yml,以确保在sessions键下存在"default"配置.如果以编程方式设置了配置,请确保配置哈希中存在"default".来自/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/sessions/factory.rb:27:increate' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/sessions.rb:65:inwith_name'来自/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/sessions.rb:105:inmongo_session' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/sessions.rb:121:incollection'from/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/sessions/options.rb:161:ininmethod_missing' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/contextual/mongo.rb:263:ininitialize'from/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/contextual.rb:53:innew' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/contextual.rb:53:increate_context'from/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/contextual.rb:35:incontext' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/contextual.rb:20:infirst'from/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta2/lib/mongoid/findable.rb:122:infirst' from (irb):1 from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/console.rb:90:instart'from /Users/rizalmuthi/.rbenv /versions/2.1.1/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/console.rb:9:instart' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:69:inconsole'from /Users/rizalmuthi/.rbenv/versions /2.1.1/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:inrun_command!' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/railties-4.1.1/lib/rails/commands.rb:17:in"from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems /activesupport-4.1.1/lib/active_support/dependencies.rb:247:in中的require' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in阻止来自/Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport -4.1.1/lib/active_support/dependencies.rb:232:inload_dependency' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:inrequire'from/Users/rizalmuthi/Documents/Sites/WORK/tapway/bin/rails:8:in<top (required)>' from /Users/rizalmuthi/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:inload'from /Users/rizalmuthi/.rbenv/版本/ 2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:inblock in load' from …