mongoid / mongodb - геопространственные запросы во встроенном документе - PullRequest
0 голосов
/ 07 февраля 2012

можно сделать геопространственный запрос на внедренный документ и получить «плоский» результат?

Class a
  ....
  embeds_many : bs
end


Class b
   ....
   field :location, :type => Array

   embedded_in :a, :inverse_of => :b
   index [[:location, Mongo::GEO2D]]
end

Я смог нажать индексацию в консоли Монго

db.a.ensureIndex({"bs.location" : "2d"})

А затем смог запросить с консоли Монго

db.a.find( { 'b.location' : { $near : [50,50] } # mongo console 

Однако результатом является список документов "a", а не список объектов "b".

Два вопроса: 1 * Это то, что я пытаюсь сделать выполнимым? (Я знаю [и слежу за виртуальной коллекцией Jira] http://jira.mongodb.org/browse/SERVER-142)

2 * Если да, как это можно сделать в Mongoid?

Если нет, у меня будет только один вариант - удалить встроенную коллекцию и перейти к «классической» ссылочной / is_referenced паре классов.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Это не возможно в v2.0, но в v2.1, с использованием структуры агрегации и переименования полей (могут быть и другие способы).

Основная идея состоит в том, чтобы $ match: {$ near: <>}, затем $ project: {_id: 0, location: "$ b.location"}

http://www.mongodb.org/display/DOCS/Aggregation+Framework+-+%24project#AggregationFramework-%24project-RenamingFields

0 голосов
/ 07 февраля 2012

Это не выполнимо. Вам придется использовать один запрос, чтобы получить список документов «a», а затем отфильтровать его в список документов «b», но объединить его в один шаг невозможно.

...