假设您有以下mongoid文档:
class User
include Mongoid::Document
embeds_one :name
end
class UserName
include Mongoid::Document
field :first
field :last_initial
embedded_in :user
end
Run Code Online (Sandbox Code Playgroud)
你如何创建一个工厂女工厂,初始化嵌入的名字和最后的名字?你也将如何处理这种embeds_many
关系呢?
使用Rails 3,从Mongoid 2.x升级到Mongoid 3.x后,我的Heroku + MongoHQ设置停止工作.有趣的是,我的开发和测试框架以及我的整个测试套件都通过了.
我怀疑问题出在我的mongoid.yml文件中,但我已经尝试搜索文档,google和stackoverflow,并使用了所有建议的格式,包括:heroku mongohq和mongoid Mongo :: ConnectionFailure或实际上:https:/ /gist.github.com/2900804
更新7月16日:这是我的mongoid.yml文件看起来的样子,在尝试了多个事情之后 + 来自MongoHQ的Jason建议:
development:
sessions:
default:
database: development
hosts:
- localhost:27017
test:
sessions:
default:
database: test
hosts:
- localhost:27017
production:
sessions:
default:
uri: <%= ENV['MONGOHQ_URL'] %>
options:
skip_version_check: true
safe: true
Run Code Online (Sandbox Code Playgroud)
(根据我的理解,它基本上与上面链接中的相同,除了它使用uri;我尝试了另一种方式,将MONGOHQ_URL分成单独的字段,但它没有帮助)
我已经尝试将mongoid设置为3.0.0rc并将版本留空在我的Gemfile中.由于HTTPS证书或其他原因,使用github版本失败,所以我没有多次尝试它.
动作控制器所说的是:
Moped::Errors::OperationFailure in Home#index
Showing /app/app/views/home/index.html.haml where line #2 raised:
The operation: #<Moped::Protocol::Command
@length=68
@request_id=4
@response_to=0
@op_code=2004
@flags=[:slave_ok]
@full_collection_name=".$cmd"
@skip=0
@limit=-1
@selector={:count=>:posts, :query=>{}}
@fields=nil>
failed with error "db assertion …
Run Code Online (Sandbox Code Playgroud) 我按照此页面查看了mongoDB查询.结果我可以看到Moped日志.
但是我看不到原始的mongoDB查询.
如何在rails控制台/服务器中显示MongoDB查询
我确实喜欢以下.
# in [rails root]/config/environments/development.rb
Mongoid.logger.level = Logger::DEBUG
Moped.logger.level = Logger::DEBUG
Mongoid.logger = Logger.new("#{Rails.root}/log/mongoid_development.log")
Moped.logger = Logger.new("#{Rails.root}/log/moped_development.log")
# in [rails root]/log/mongoid_development.log
# show nothing.
# in [rails root]/log/moped_development.log
MOPED: [ip address]:27017 QUERY database=[database name] collection=[collection name] selector={"$query"=>{"screen_name"=>"ts_3156"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (54.6286ms)
Run Code Online (Sandbox Code Playgroud)
如何查看Mongoid的原始mongoDB查询?
我希望看到如下所示.
db.[collection name].find({ $query: {"screen_name"=>"ts_3156"}, $orderby: {:_id=>1} })
Run Code Online (Sandbox Code Playgroud)
我可以在/var/log/mongo/mongo.log中看到原始的mongoDB查询.
但我希望在ORM(Mongoid)的日志中看到原始查询.
我有一个使用Mongoid的rails 4 app.我想做一些基本的事情是根据索引视图中的字段created_at以降序显示我拥有的书模型.在控制器books_controller.rb中:
def index
@books = Book.order_by(:created_at.desc)
end
Run Code Online (Sandbox Code Playgroud)
这不起作用.我还尝试了以下2个不起作用:
@books = Book.find :all, :order => "created_at DESC"
Book.find(:all, :order => "created_at DESC").each do |item|
@books << item
end
Run Code Online (Sandbox Code Playgroud)
在视图中我有这样的事情:
<% @books.each do |b| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
谢谢.
这可能听起来像一个微不足道的问题,但对于面向消费者的应用程序来说这是非常重要的
什么是最简单的方法和最可扩展的方式将可怕的mongo id映射到一个友好的id?
xx.com/posts/4d371056183b5e09b20001f9
至
xx.com/posts/a
中号
我已经设置了rails3 + mongoid应用程序,当我打开rails控制台时,没有一个查找器似乎工作 - http://d.pr/FNzC
User.all
User.find(:all, :conditions => { first_name => "John" })
Run Code Online (Sandbox Code Playgroud)
两者都回归:
#<Mongoid::Criteria
selector: {},
options: {}>
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
我正在使用Mongoid 3,使用Rails 3.2.9和Unicorn进行制作.想为mongodb建立一个before_fork和after_fork,找到以下代码进行活动记录:
before_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end
end
after_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
end
Run Code Online (Sandbox Code Playgroud)
Mongoid的相关代码是什么(连接和断开连接)?
更新:
你真的不需要这样做,所以对于想要查看这个问题的人看到:
http://mongoid.org/en/mongoid/docs/rails.html
"独角兽和乘客
当使用Unicorn或Passenger时,每次使用app预加载或智能生成时分叉子进程,Mongoid将自动重新连接到master数据库.如果您手动在应用程序中执行此操作,则可以删除代码."
虽然知道什么是等效的Mongoid代码仍然很有趣.
我有一个mongodb集合,其中每个文档都有一些属性和一个utc时间戳.我需要从集合中提取数据并使用聚合框架,因为我使用集合中的数据在用户界面上显示一些图表.但是,我需要根据用户的时区进行聚合.假设我知道用户的时区(通过浏览器或其他方式传递请求),有没有办法使用聚合框架根据[客户端]时区进行聚合?
我有Author
和Book
模特.
一个Author
有许多嵌入式Books
.
我可以查询嵌入式Books
,还是我必须Authors
首先获取Books
?
我们的应用程序非常大量地使用ajax,因此我们var items = #{@items.to_json}
在所有视图中都有语句.现在@items
正在控制器中设置为@items=Item.all
.问题是,它@items
是一个Mongoid::Criteria
,它没有.to_json
方法.因此,渲染视图时会出现错误.是否有一种简单的方法可以将此条件对象转换为数组,而无需使用类似的代码@items.collect {|i| i}