在我的模型中,我有:
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是有界的.
湾始终(或几乎总是)与父母一起出现.
>如果您可以证明嵌入所获得的性能改进超过了获取所有对象所需的多个查询的成本,您也可以嵌入.
嵌入或相关都不应该是首选.应该平等地考虑它们.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。