标签: mongomapper

了解MongoMappers的很多关系

好的,首先我不知道Ruby,Rails,Mongo甚至ActiveRecord,所以如果这些问题相当基本,我会道歉.首先,我有一个"事件"模型,我在"评论"模型中添加了许多关系.现在,我对mongo(或任何文档数据库)的基本理解是不建议外键查找(或mongo中调用的任何内容),而是选择尽可能多地存储在单个文档中.考虑到这一点,我希望有一个单独的事件集合,每个文档中都嵌入了注释JSON/BSON,即

event:

{
 Title: "some event"
 Comments : [
    { user_id: [object id], comment: "comment"}, 
    { user_id: [object id], comment: "other comment"}
 ]
}
Run Code Online (Sandbox Code Playgroud)

相反,我看到已经创建了一个评论集合以及事件集合.这是映射此关系的正确方法吗?如果是这样,我如何停止创建评论集合,而是将信息直接嵌入到事件中?我的猜测是我必须告诉我的Comment映射不要有_id属性,因此不属于它自己的集合.


编辑:我发现我在第一个问题中寻找的是使用MongoMapper :: EmbeddedDocument而不是包含MongoMapper :: Document


其次,我希望用户能够将自己标记为"参与"或仅仅"感兴趣"一个事件,我假设该事件将被建模为事件上的参考user_id的数组.所以我最初认为它将被映射为两个"很多"关系,但据我所知,我传递给常量的常量的名称用于创建getter/setter,这对我来说不起作用如果我有两个相同类型的关系.

换句话说,如果我有这个映射:

class Event
   many :users
end
Run Code Online (Sandbox Code Playgroud)

然后我的理解是,我将为users属性生成getter和setter.所以我可以这样做:

event.users << someAttendingUser

这是所有的好,在这个时间点我想参考用户存储,而不是整个用户BSON(不像上述意见例子).现在的问题是,当我对用户集合进行两次多次映射时,我该如何做到这一点,因为我需要"参与"和"感兴趣"的用户?

所以总结这漫无边际:

  • 有时我想将许多关系直接存储在orinal文档中作为BSON,而不是作为对另一个集合中的文档的引用.我该怎么做呢?

  • 有时我想在文档上存储许多相同类型的关系,我希望它们是对另一个集合中的文档的引用.我该怎么做呢?

希望这是有道理的,如果我在这里问明显,我道歉.


编辑2:

好吧,我在问这个问题之前确实做过搜索,但看来我现在已经找到了我的两个问题的答案,所以我将自己关闭这个问题.

第二部分要求我为映射指定一个类名选项,即

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails mongomapper

11
推荐指数
1
解决办法
1217
查看次数

mongoid中的N + 1问题

我正在使用Mongoid在Rails中使用MongoDB.

我正在寻找的是积极的记录include.目前我没有在mongoid orm中找到这样的方法.

任何人都知道如何在mongoid或mongomapper中解决这个问题,这是另一个很好的选择.

ruby-on-rails mongodb mongomapper mongoid

10
推荐指数
4
解决办法
6188
查看次数

mongo_mapper或带有rails4的mongoid

ORM mongo_mapper和mongoid都支持rails上的ruby.但是,在阅读完他们的文档后,我仍然无法决定用哪个来开发一个带有rails4的新应用程序.

有什么建议吗?

mongodb mongomapper mongoid ruby-on-rails-4

10
推荐指数
1
解决办法
4674
查看次数

Rails + MongoMapper + EmbeddedDocument形式帮助

我正在开发一个非常简单的Web应用程序(着名的最后一句话),我正在使用Rails 2.3.5 + MongoMapper 0.7.2并使用嵌入式文档.我有两个问题要问:

首先,有没有使用Rails + MongoMapper + EmbeddedDocument的示例应用程序?最好是在GitHub或其他类似的网站上,这样我就可以看看来源,看看我应该去哪里?如果不 ...

......处理这项任务的最佳方法是什么?我将如何创建表单来处理嵌入式文档.

我试图做的是向用户添加地址.如果你愿意,我可以折腾这两个模型.

谢谢您的帮助!

forms ruby-on-rails mongodb mongomapper

9
推荐指数
1
解决办法
2199
查看次数

MongoMapper和bson_ext问题

我不能让MongoMapper使用我的Rails应用程序.我收到此错误消息:

**注意:未加载C扩展名.这是最佳MongoDB Ruby驱动程序性能所必需的.您可以按如下方式安装扩展:gem install bson_ext

如果在安装后继续收到此消息,请确保bson_ext gem位于加载路径中,并且bson_ext和mongo gem的版本相同.

我安装了DevKit并安装了gem:gem install bson_ext --no-rdoc --no-ri(结果:bson_ext-1.0.1已安装)

我在Windows 7上运行.Rails版本是2.3.7.我在安装时使用了RubyInstaller.谁能指出我正确的方向?

ruby-on-rails mongomapper

9
推荐指数
1
解决办法
9229
查看次数

有关从MongoMapper迁移到Mongoid的建议?

看起来Mongoid现在是基于性能和开发活动的Mongo的优秀ORM.不幸的是,我们在MongoMapper上并且需要迁移.

我们应该注意哪些问题或绊脚石?我们在Google上发现了一些过时的文章,并尝试在Mongoid Google网上论坛上发帖(虽然我们被禁止),但是会喜欢过去做过这种情况的SO成员的想法.

我们在Rails 3.2.12上.

谢谢!

ruby-on-rails mongodb mongomapper mongoid mongoid3

9
推荐指数
1
解决办法
844
查看次数

如何删除mongomapper中的嵌入文档?

嗨大家我用mongomapper运行sinatra应用程序.我有一些名为Movie(Document)和Cover(EmbeddedDocument)的模型.我将封面嵌入到电影中

@movie.covers << @cover
@movie.save
Run Code Online (Sandbox Code Playgroud)

这非常有效.当点击@ movies.covers时,我得到了一系列嵌入式文档.但我无法破坏嵌入式文档.我试过这样的事

@movie.covers.each do |c|
c.destroy
end

NoMethodError: undefined method `destroy' for #<Cover:0xb7b20734>
 from (irb):5
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `call'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `method_missing'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `each'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `send'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `method_missing'
 from (irb):4
 from :0
Run Code Online (Sandbox Code Playgroud)

任何人都可以如何摧毁它?如果有人启发我如何更新嵌入式文档会很棒.

ruby-on-rails sinatra mongomapper

8
推荐指数
1
解决办法
3793
查看次数

在查询中返回嵌入的文档

是否可以执行查询并返回嵌入的文档?

目前,我有:

class Post
  include MongoMapper::Document

  many :comments
end

class Comment
  include MongoMapper::EmbeddedDocument

  belongs_to :post

  key :author
  key :date
  key :body
end
Run Code Online (Sandbox Code Playgroud)

这是一个几乎存在的查询:

Post.all("comments.date" => {"$gt" => 3.days.ago})
Run Code Online (Sandbox Code Playgroud)

这将返回所有post对象,但不返回注释.我想我可以这样做:

Post.all("comments.date" => {"$gt" => 3.days.ago}).map(&:comments)
Run Code Online (Sandbox Code Playgroud)

但这将返回帖子中的所有评论.我想得到满足这一条件的所有评论.也许Comment不应该嵌入.

ruby-on-rails mongodb mongomapper

8
推荐指数
1
解决办法
1495
查看次数

如何修改宝石?

我有一个宝石,我想做一些改变.

我在我的Gemfile中定义它如下:

gem 'mongo_mapper", :git => "git://github.com/jnunemaker/mongomapper", :branch => "rails3" 
Run Code Online (Sandbox Code Playgroud)

我无法找到它/usr/local/ruby/lib/ruby/gems/1.9.1/gems.

rubygems mongomapper ruby-on-rails-3

8
推荐指数
1
解决办法
2611
查看次数

从MongoMapper对象中包含JSON响应中的嵌套对象

class Api::StoresController < ApplicationController  
  respond_to :json

  def index
    @stores = Store.all(:include => :products)
    respond_with @stores
  end
end
Run Code Online (Sandbox Code Playgroud)

仅返回没有产品的商店

Store.find(:all).to_json(:include => :products)
Run Code Online (Sandbox Code Playgroud)

该关联已经过测试,我可以看到控制台中的嵌套产品,例如,

Store.first.products
Run Code Online (Sandbox Code Playgroud)

将他们的产品包含在MongoMapper中的正确方法是什么?

这是我的模特:

   class Store
     include MongoMapper::Document         
     many :products, :foreign_key => :store_ids 
   end

   class Product
     include MongoMapper::Document         
     key :store_ids, Array, :typecast => 'ObjectId'
     many :stores, :in => :store_ids
   end
Run Code Online (Sandbox Code Playgroud)

UPDATE

在尝试Scott的建议时,我在Store模型中添加了以下内容:

def self.all_including_nested
  stores = []
  Store.all.each do |store|
    stores << store.to_hash
  end
end

def to_hash
  keys = self.key_names
  hash = {}
  keys.each{|k| hash[k] = self[k]}
  hash[:products] = …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails mongomapper responders

8
推荐指数
1
解决办法
5961
查看次数