例如,在进行分析时,可能需要10秒的map/reduce运行.运行后,如果其他网页可以使用该结果,那么每页将节省10秒.
以某种方式缓存map/reduce结果会很好.
可以像map_reduce_result_[timestamp]在db中一样记录成功的map/reduce运行,然后将此时间戳保存db.run_log在MongoDB中.例如,此时间戳是UNIX纪元时间.因此,当其他页面需要访问结果时,它们可以获得最大时间戳,然后只查找存储在MongoDB中的结果.但这样做有点像黑客,并想知道是否有更好的方法来做到这一点.
我想知道我是否可以编写验证来验证基于多个字段的记录的唯一性.我的模型有一个复合主键,即
field :houseno, :type => String
field :street, :type => String
field :boro, :type => String
Run Code Online (Sandbox Code Playgroud)
什么是验证此记录的唯一性的好方法?
我正在尝试使用这样的自定义验证器:
class AddressValidator < ActiveModel::Validator
def validate(record)
record.errors[:base] << "This address is already in our records." unless check(record)
end
private
def check(record)
Address.find(:street=>record.street,:houseno=>record.houseno,:boro=>record.boro).length > 0
end
end
Run Code Online (Sandbox Code Playgroud) 在Mongoid中,我如何实现ActiveRecord :through =>提供的相同功能?
class Advertiser
include Mongoid::Document
embeds_many :campaigns
# how would I do this
embeds_many :advertisements, :through => :campaigns
end
class Campaign
embedded_in :advertiser
embeds_many :advertisements
end
class Advertisement
embedded_in :campaign
# or this?
embedded_in :advertiser, :through => :campaign
end
Run Code Online (Sandbox Code Playgroud)
那么能够做到
Advertiser.first.advertisements
和
Advertisement.first.advertiser
Advertiser.campaigns.collect{|campaign| campaign.advertisement} 不是一种选择
怎么样,我怎么用references_many/ referenced_in?
我想在我的rails应用程序中使用"acts-as-taggable-on"gem.(rails 3.0.10和ruby 1.9.2p0)
但我正在使用mongoid.
因为"act-as-taggable-on"适用于AR,有没有办法将它用于mongo.
或者是否有任何其他可用于标记的gem可以与mongo一起使用.
我如何创建一个Mongoid模型,该模型能够保存在自己的集合中,并嵌入到另一个文档中?
我安装了gem mongoid到RoR应用程序,但收到错误"未定义的方法`键?" 为nil:NilClass",同时为键功能指定属性.
所以我有这个模型:
class Author
include Mongoid::Document
field :name
key :name
end
Run Code Online (Sandbox Code Playgroud)
并默认脚手架控制器和运行此url localhost:3000/authors,收到此错误
NoMethodError in AuthorsController#index
undefined method `key?' for nil:NilClass
Rails.root: C:/Users/Jeremy/RubymineProjects/university
Run Code Online (Sandbox Code Playgroud)
宝石文件:
source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem "mongoid", "~> 3.0.0"
gem "bson_ext", "~> 1.2"
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
Run Code Online (Sandbox Code Playgroud)
我从这里使用了指南http://railscasts.com/episodes/238-mongoid?view=asciicast,做了两次相同的事情.
我有一个具有许多动态属性的Record模型.我想向模型发出请求,将响应作为JSON发送给客户端.但我想_id在此模型中排除类似和所有foreign_keys的字段.
我发现了如何排除某些键的值的有趣答案:如何从Mongoid中的嵌入文档中排除字段?,但响应中的键仍然存在.
我有:
{
"_id": 1,
"name": "tom"
}
Run Code Online (Sandbox Code Playgroud)
并且该without方法使:
{
"_id": nil,
"name": "tom"
}
Run Code Online (Sandbox Code Playgroud)
但我想要:
{
"name": "tom"
}
Run Code Online (Sandbox Code Playgroud)
是否可以从结果中删除或排除某些键和值?
我有一个名为Equipment的Mongoid文档,它可以嵌入多个问题文档.以下是文档架构:
class Equipment
include Mongoid::Document
include Mongoid::Timestamps
field :description
field :modelNumber
field :title
field :categoryId
field :subCategoryId
field :stateId
field :city
field :askingPrice
embeds_many :questions
end
class Question
include Mongoid::Document
field :content
attr_accessible :content
embedded_in :equipment, :inverse_of => :questions
embeds_one :answers
end
Run Code Online (Sandbox Code Playgroud)
我的问题是我可以根据问题ID检索问题文档.但是,我当前的查询返回父设备文档.我原以为查询会返回嵌入的问题文档.我最终可以获得嵌入式问题文档,但我必须遍历父设备文档的所有问题文档.
这是我目前的查询:
@question = Equipment.where('questions._id' => Moped::BSON::ObjectId(params[:id])).first
Run Code Online (Sandbox Code Playgroud)
有没有办法直接获取嵌入的问题文档?
我希望能够在同一个模型中多次引用模型(has_many关系).例如,给定以下模型:
class MyModel
include Mongoid::Document
field :name, type: String
has_many :main_efforts, :class_name => 'Effort', as: :effortable, dependent: :delete, autosave: true
has_many :secondary_efforts, :class_name => 'Effort', as: :effortable, dependent: :delete, autosave: true
validates_presence_of :name
end
class Effort
include Mongoid::Document
field :name, type: String
belongs_to :effortable, polymorphic: true
validates_presence_of :name
end
Run Code Online (Sandbox Code Playgroud)
如您所见,Effort模型被引用两次.最初,我的Effort模型不是多态的,但似乎Mongoid无法确定努力属于哪个集合(main_efforts或secondary_efforts).因此,我把它变成了多态的.但是,在使其成为多态之后,我的main_efforts和secondary_efforts字段始终是一个空数组.
在同一模型中多次引用多态模型的正确方法是什么(假设需要多态模型)?
我是Rails和Mongoid的新手,我的mongoid.yml文件包含以下各项:
development:
# Configure available database clients. (required)
clients:
# Defines the default client. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: mycollectionname
# Provides the hosts the default client can connect to. Must be an array
# of host:port pairs. (required)
hosts:
- localhost:27017
Run Code Online (Sandbox Code Playgroud)
这对于开发是正常的,但是,在生产环境中,我想从环境变量中指定主机,例如ENV['OPENSHIFT_MONGODB_DB_HOST']+“:” +ENV['OPENSHIFT_MONGODB_DB_PORT']
我已经尝试过各种方法
hosts:
- <%= \"#{ENV['OPENSHIFT_MONGODB_HOST']}:#{ENV['OPENSHIFT_MONGODB_PORT']}\" %>
Run Code Online (Sandbox Code Playgroud)
要么
hosts:
- #{ENV['OPENSHIFT_MONGODB_HOST']:ENV['OPENSHIFT_MONGODB_PORT']}
Run Code Online (Sandbox Code Playgroud)
等等,但是没有用
mongoid ×10
mongodb ×7
mongoid3 ×2
ruby ×2
activerecord ×1
mapreduce ×1
openshift ×1
validation ×1