2015-06-25 4 views
0

Первоначально я указал отношения, в которых контакт has_many сервисов. Таким образом, услуга имеет внешний ключ contact_id:mongodb many to many without join table

class Contact 
    include Mongoid::Document 
    field :name, type: String 
end 

class Service 
    field :name, type: String 
    field :contact_id, type: Integer 
end 

Теперь есть возможность добавить дополнительный контакт к службе, поэтому сервис имеет много контактов. Однако добавленные контакты - это те, которые уже существуют независимо. Поэтому я не хочу встраивать одну сущность в другую. Контакт и сервис всегда будут жить независимо. Нет внедрения.

Так что я должен просто хранить идентификаторы контактов внутри массива службы? Другими слова, мои новые модели будут выглядеть следующим образом:

class Contact 
    include Mongoid::Document 
    field :name, type: String 
end 

class Service 
    field :name, type: String 
    field :contact_id, type: Integer 
    field :contact_ids, type: Array, default: [] 
end 

Или есть лучшее решение для решения многих проблем многих здесь (без вложения одного документа в другом)?

ответ

0

Для многих-To-Many, у вас нет 36 вариантов: вы на самом деле 2:

  • массив идентификаторов, с одной стороны, как вы сделали
  • массив идентификаторов на обеих сторонах.

Охлаждающая вещь с решением «обеих сторон» заключается в том, что вы можете найти документы запроса из обеих коллекций, чтобы получить ссылки.

Пример с книгами и авторами:

db.books.findOne() 
{ 
    _id: 1, 
    title: "The Great Gatsby", 
    authors: [1, 5] 
} 

db.authors.findOne() 
{ 
    _id: 1, 
    firstName: "F. Scott", 
    lastName: "Fitzgerald", 
    books: [1, 3, 20] 
}