String "> String "> String " />

どのように最初の要素だけを取得するembedded_inからスコープを作るのですか?

私は多くの座標が埋め込まれています。それぞれのPlaceオブジェクトの最初の "開始"座標のみを取得する方法は?スコープは正しいアイデアですか?私はすべての(非常に遅い)座標を持つ場所の最初、最後、またはすべてを選択することができます、私のコメントアウトされた範囲は動作しません。

コード:

class Place
  include Mongoid::Document
  field :title, :type => String
  embeds_many :coordinates
  # def self.start_coordinate
  #   self.coordinates.first
  #   first = self.coordinates.first
  ##  first = self.find({}, { "coordinates" => { "_id" => firstobj?}})
  ##  first = self.find({}, { "coordinates" => {}, :limit=>1})
  ##  self.includes(:coordinates).first
  ##  self.collection.(:coordinates).find_one()
  ### self.all
  # end
end

class Coordinate
  include Mongoid::Document
  include Mongoid::Spacial::Document
  field :coordinates, :type => Array, spacial: true
  spacial_index :coordinates
  embedded_in :place, :inverse_of => :coordinate
end

MongoDB placeオブジェクト:

{ "_id" : ObjectId( "4ece5a04ca6a175b08000016" ),
  "coordinates" : [ 
    { "lat" : 51.54983275438141,
      "lng" : 17.31981750561522,
      "_id" : ObjectId( "4ece5a04ca6a175b08000002" ) }, 
    { "lat" : 51.55282151156834,
      "lng" : 17.35552307202147,
      "_id" : ObjectId( "4ece5a04ca6a175b08000003" ) }, 
    { "lat" : 51.53830285151265,
      "lng" : 17.39397522045897,
      "_id" : ObjectId( "4ece5a04ca6a175b08000004" ) } ],
  "created_at" : Date( 1322146308000 ),
  "description" : "description",
  "title" : "test",
  "updated_at" : Date( 1322154405000 ),
  "user_id" : ObjectId( "4ecd7d4eca6a175783000010" ) }
2

1 答え

スコープは通常、いくつかの基準に基づいて必要な全体オブジェクトの結果セットをフィルタリングするために使用されます。代わりに、特定の文書の特定の属性を選択しようとしているようです。これを行うには、唯一の方法を使用する必要があります。

これはうまくいくかもしれませんが、正確な構文についてはわかりません:

Place.only(":coordinates.0")
1
追加された