加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails,MongoID和嵌入式关系

发布时间:2020-12-17 03:59:58 所属栏目:百科 来源:网络整理
导读:我在Rails中有一些关于MongoID和嵌入式关系的问题. 在我的模型中,我有: class Board include Mongoid::Document attr_accessible :title field :title,:type = String #has_and_belongs_to_many :users embeds_many :itemsend 我打电话的时候 Board.all 它
我在Rails中有一些关于MongoID和嵌入式关系的问题.

在我的模型中,我有:

class Board
  include Mongoid::Document

  attr_accessible :title

  field :title,:type => String

  #has_and_belongs_to_many :users
  embeds_many :items
end

我打电话的时候

Board.all

它返回整个集合,包括:items.

我在许多文章/论坛中都读过,使用MongoDB嵌入式关系应优先于引用的关系,但我有一些问题:

>表演怎么样?每次我想要检索一个板子我也会检索它里面的物品:它有时可能很有用但是在我只想要板子的信息而不是其中的物品的情况下我应该创建一个不检索物品的新方法.
>当我想要更新项目时,DB将重新加载整个文档而不仅仅是我想要检索的项目,对吧?

到目前为止,我已经注意到使用嵌入式文档的唯一优势是像SQL中的所谓“连接”,但我也看到很多性能问题,有没有重要的理由使用嵌入式关系而不是引用关系?

编辑

正如Adam C所指出的,我的想法与以下情况相关:

如前所述,我将在每个板块中都有许多项目,并使用Rails脚手架,它生成的方法从数据库中检索整个Board文档但很多次(例如编辑板时)我想加载没有项目的文档部分.

由于我将主要使用JSON调用,我的想法是在url中添加一个可选参数,如“get_items”设置为TRUE,以防我想要获取项目,在其他情况下我会使用Mongoid:

Model.without

例如,让我们采取索引操作:

def index
    @boards = Board.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @boards }
    end
  end

我只需要获取Board Model中指定的字段(在这种情况下只有:title),没有项目,所以我可以使用:

def index
    @boards = Board.without :items

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @boards }
    end
  end

那我的原因有些问题?

解决方法

如果您需要单独检索项目,则不应嵌入它们.

我的经验法则:

>顶级域对象(您自己使用的对象,并不总是出现在其“父”的上下文中)应该获得自己的集合.
>嵌入相关的东西时

一个.不要无限制地成长.也就是说,在1-N关系中,N是有界的.

湾始终(或几乎总是)与父母一起出现.
>如果您可以证明嵌入所获得的性能改进超过了获取所有对象所需的多个查询的成本,您也可以嵌入.

嵌入或相关都不应该是首选.应该平等地考虑它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读