标签: mongoid

使用MongoDB,重新使用Map/Reduce结果的简单方法是什么?

例如,在进行分析时,可能需要10秒的map/reduce运行.运行后,如果其他网页可以使用该结果,那么每页将节省10秒.

以某种方式缓存map/reduce结果会很好.

可以像map_reduce_result_[timestamp]在db中一样记录成功的map/reduce运行,然后将此时间戳保存db.run_log在MongoDB中.例如,此时间戳是UNIX纪元时间.因此,当其他页面需要访问结果时,它们可以获得最大时间戳,然后只查找存储在MongoDB中的结果.但这样做有点像黑客,并想知道是否有更好的方法来做到这一点.

mapreduce mongodb mongoid

4
推荐指数
1
解决办法
1857
查看次数

如何在ActiveRecord中使用复合键验证模型?

我想知道我是否可以编写验证来验证基于多个字段的记录的唯一性.我的模型有一个复合主键,即

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)

validation activerecord mongoid ruby-on-rails-3

4
推荐指数
1
解决办法
3242
查看次数

Mongoid嵌入/ has_many:通过等价物

在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.advertisementsAdvertisement.first.advertiser

Advertiser.campaigns.collect{|campaign| campaign.advertisement} 不是一种选择

怎么样,我怎么用references_many/ referenced_in

ruby-on-rails mongodb mongoid ruby-on-rails-3

4
推荐指数
1
解决办法
3068
查看次数

想要为mongoid使用"act-as-taggable-on"

我想在我的rails应用程序中使用"acts-as-taggable-on"gem.(rails 3.0.10和ruby 1.9.2p0)

但我正在使用mongoid.

因为"act-as-taggable-on"适用于AR,有没有办法将它用于mongo.

或者是否有任何其他可用于标记的gem可以与mongo一起使用.

ruby-on-rails mongodb mongoid

4
推荐指数
1
解决办法
1623
查看次数

具有Mongoid Embedded和Standalone的Rails模型

我如何创建一个Mongoid模型,该模型能够保存在自己的集合中,并嵌入到另一个文档中?

mongodb mongoid ruby-on-rails-3

4
推荐指数
1
解决办法
1164
查看次数

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,做了两次相同的事情.

ruby-on-rails mongodb mongoid

4
推荐指数
1
解决办法
1906
查看次数

从mongoid中的文档中排除字段?

我有一个具有许多动态属性的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)

是否可以从结果中删除或排除某些键和值?

ruby-on-rails mongodb mongoid

4
推荐指数
1
解决办法
2243
查看次数

使用Mongoid检索嵌入的文档

我有一个名为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)

有没有办法直接获取嵌入的问题文档?

ruby mongodb mongoid mongoid3

4
推荐指数
1
解决办法
3708
查看次数

Mongoid:通过has_many不止一次引用相同的模型

我希望能够在同一个模型中多次引用模型(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字段始终是一个空数组.

在同一模型中多次引用多态模型的正确方法是什么(假设需要多态模型)?

ruby mongoid mongoid3

4
推荐指数
1
解决办法
623
查看次数

mongoid yaml组合主机的环境变量

我是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)

等等,但是没有用

ruby-on-rails environment-variables mongoid openshift

4
推荐指数
1
解决办法
986
查看次数