Как сделать область из встроенного в нее, чтобы получить только первый элемент? - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть много координат, встроенных в место. Как получить только первую «стартовую» координату для каждого объекта «Поместить»? Сфера это правильная идея? Я могу выбрать только первое, последнее или все места со всеми (очень медленными) координатами, моя закомментированная область не работает.

код:

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:

{ "_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" ) }

1 Ответ

1 голос
/ 28 ноября 2011

Области обычно используются для фильтрации результирующего набора целых объектов, которые вы хотите, на основе некоторых критериев. Вместо этого похоже, что вы пытаетесь выбрать определенные атрибуты данного документа. Для этого следует использовать единственный метод.

Это может сработать, но не уверен насчет точного синтаксиса:

Place.only(":coordinates.0")
...