Я знаю, что этот вопрос старый, но здесь стоит иметь ответы, которые могут прочитать другие люди.
Монго был построен для таких понятий, как лайки. В хранилище документов очень легко добавлять такие функции, не прибегая к отказу от модели, данных или какой-либо миграции.
NoSQL dbs (и mongo не самый быстрый) быстро высветляются, так что вы можете воспользоваться этим и упростить вашу модель.
Я бы создал документы под названием «Песни, пользователи, лайки и плейлисты», а затем создал бы ассоциации между ними. Вы можете изменить логику в соответствии с вашим случаем, но если вы предполагаете, что список воспроизведения является общим для пользователей, но принадлежит одному пользователю, вы можете создать следующие ассоциации (в зависимости от драйвера mongo синтаксис будет разным, ниже представлен mongomapper):
Playlists:
many :users, :as => :shared_with_users
one :users, :as => :owner
Users:
many Playlists
Это создаст ассоциации между объектами. Под вашим объектом User вы сможете найти списки воспроизведения, связанные с этим пользователем, используя user.playlist, который будет возвращать курсор связанных объектов списка воспроизведения. Как и при использовании объекта списка воспроизведения, вы можете посмотреть на владельцев или shared_with_users, чтобы найти объекты, которые вы хотите таким образом.