当前位置:  开发笔记 > 编程语言 > 正文

MongoDB和Mongoid - 动态字段

如何解决《MongoDB和Mongoid-动态字段》经验,为你挑选了1个好方法。

我正在使用MongoDB,但我并没有真正使用它的动态字段功能

  field :fb_followers => Integer
  field :twitter_followers => Integer
  field :twitter_rts => Integer
  field :link_visiting => Integer
  field :reduce_points_per_day => Integer

我该如何写这个,所以每个字段对于模型都是可选的?



1> tkrajcar..:

所以这里有一些特定于Mongoid的信息.首先,确保在您的配置中allow_dynamic_fields设置true(默认为true,但总是很好).

对于我的例子,这是世界上最简单的Mongoid类:

class Foobj
  include Mongoid::Document
  field :static_field
end

所以,我们当然可以static_field正常设置:

ruby-1.9.2-p290 :012 > f = Foobj.create!(:static_field => 'barbaz!')
 => #

但我们不能"动态"做一个动态领域,因为Mongoid还不知道它.

ruby-1.9.2-p290 :013 > f.dynamic_field = "hi"
NoMethodError: undefined method `dynamic_field=' for #

但是,我可以write_attribute用来写一个动态字段:

ruby-1.9.2-p290 :014 > f.write_attribute(:dynamic_field,"hi!")
 => "hi!"
ruby-1.9.2-p290 :015 > f
 => #

而且,既然我已经在Mongoid中"创建"了该字段,我现在可以使用常规机制来访问字段,即使它不在我的类定义中:

ruby-1.9.2-p290 :017 > f.dynamic_field
 => "hi!"

另请注意,如果您使用非Mongoid指定的字段加载Mongoid文档,您确实可以使用相同的方式访问它们:

ruby-1.9.2-p290 :028 > g = Foobj.first
 => #
ruby-1.9.2-p290 :029 > g.dynamic_field
 => "hi!"

然而,动态下地干活最安全的方式是使用write_attributeread_attribute(或它们的快捷方式,[]=[]),因为这些将不会抛出NoMethodError■如果字段不存在.

希望有所帮助.当你习惯它时,它真的很简单.有关详细信息,请参阅:http://mongoid.org/docs/documents/dynamic.html

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有