MongoMapper и объединение таблиц со свойствами

У меня есть списки предметов. Элементы могут принадлежать нескольким спискам. Это легко сделать, определив отношение многие ко многим.

class List
  include MongoMapper::Document

  key :item_ids, Array
  many :items, :in => :item_ids
end

Но я также хочу, чтобы списки были упорядочены. Элемент может иметь индекс 2 в одном списке и индекс 4 в другом. Обычно я бы использовал таблицу соединений с полем «позиция», но я не могу понять, как это сделать с помощью MongoMapper, поскольку все, кажется, советуют НЕ использовать таблицы соединений в среде без SQL (что делает Отличный смысл).

Стоит ли использовать таблицы соединений в MongoDB или для этого используется другой механизм? И бонусные баллы: как реализовать это в MongoMapper?


person Todorus    schedule 29.08.2013    source источник


Ответы (1)


item_ids - это массив. Таким образом, он будет упорядочен естественным образом — вы можете просто вставить элементы в свою items ассоциацию в том порядке, в котором вы хотите, чтобы они были. Если вы хотите изменить их порядок, просто отсортируйте массив item_ids по некоторым критериям и сохраните документ. или сортировать элементы при их использовании из массива.

# When consuming the list
@list.items.sort_by &:name

# Or if you want to persist the order
@list.item_ids = @list.items.sort {|item| ... }.map(&:id)
@list.save
person Chris Heald    schedule 05.09.2013
comment
Привет, Крис, это первое, что я попробовал, но MongoMapper, похоже, переупорядочивает идентификаторы. В конце концов я взглянул на свой проект базы данных и переписал его, чтобы он лучше подходил для решения nosql, но вопрос остается в силе. Я постараюсь обновить свой вопрос с помощью теста, который я использую. - person Todorus; 17.09.2013
comment
Это похоже на ошибку! Порядок массива должен быть сохранен. Если вы можете воспроизвести проблему, отправьте отчет об ошибке по адресу github.com/mongomapper/mongomapper/issues - person Chris Heald; 17.09.2013