4

私はモデルを持っています

class MyClass
  include Mongoid::Document
  include Mongoid::Timestamps

  field :a, type: String
  field :b, type: String
  field :c, type: String
end

では、MyClass コレクション内のすべてのオブジェクトからすべてのa-s、b-s、または-s をリスト/配列として取得する方法は? cRails/Ruby/Mongoid には、これに対するシンタックス シュガーがありますか?

私は知っています、そうすることが可能です:

all_a = []

MyClass.desc(:created_at).each do |my_object|
  all_a.push(my_object.a)
end

しかし、私は考えました:

MyClass.get(:fields => :a)
MyClass.get(:fields => :a,:b)

アップデート:

私は何かを見つけました:

MyClass.create(a: "my_a_string")
MyClass.create(a: "my_another_a_string")

今:

MyClass.only(:a)

動作するはずですが、代わりに次のようになります。

 => #<Mongoid::Criteria
  selector: {}
  options:  {:fields=>{"a"=>1}}
  class:    MyClass
  embedded: false>

いつMyClass.only(:a).to_a

 => [#<MyClass _id: 525f3b9e766465194b000000, created_at: nil, updated_at: nil, a: "my_a_string", b: nil, c: nil>, #<MyClass _id: 525f4111766465194b180000, 
created_at: nil, updated_at: nil, a: "my_another_a_string", b: nil, c: nil>]

しかし、私は考えました:

["my_a_string", "my_another_a_string"]

また

[{a: "my_a_string"}, {a: "my_another_a_string"}]
4

2 に答える 2

5

MyClass.only(:a)、他のすべてのフィールドを nil として返し、選択したフィールドとその値を返します...

代わりに使用できますMyClass.pluck(:a)。ただし、渡すことができるフィールドは 1 つだけです。

複数のフィールドが必要な場合は、次のようにします。

MyClass.only(:a,:b).map {|obj| [obj.a,obj.b]}
于 2013-10-17T06:02:31.937 に答える
4

MyClass.distinct(:a)pluckまた、個別の値のみを返すため、ドロップダウンなどの入力に適している場合もあります。

于 2014-02-25T16:18:40.037 に答える