Используя Mongoose
и RESTful API
Я хотел бы иметь 2 коллекции (organizations
и projects
), тогда как Schema
первого должно содержать поле projects
типа [ObjectId]
, который ссылается на документы последнего - и наоборот.Создавая новую организацию (POST / организации), можно либо (а) оставить поле projects
пустым и добавить проектные документы позже (POST / проекты), либо (б) создать несколько проектов с ним уже.
проблемы для (b):
Кажется, что это противоречит RESTfulness, потому что публикация новой организации должна иметь точку API, отличную от публикации нового проекта, - но мы хотим достичь обоихза один раз.
Когда мы создаем новую организацию, поле projects
должно содержать массив ObjectIds, ссылающихся на соответствующие проекты - но у них еще не будет идентификаторов.
Вероятно, есть много способов для достижения цели - например, 2 последовательных запроса POST: сначала проекты, затем организация.Но я хотел бы узнать о передовом опыте для этого сценария.
Схема Oranization:
{
name: { type: String, required: true },
address: { type: String },
// projects = array of ObjectIds referring to Project documents
projects: { type: [Mongoose.Schema.Types.ObjectId] }
}
Схема проекта:
{
name: { type: String, required: true },
start: { type: Date },
end: { type: Date },
organization: { type: Mongoose.Schema.Types.ObjectId }
}
Предоставлено описание проблемы и кодупрощенные примеры для большого проекта, в котором будет много моделей / коллекций с множеством перекрестных ссылок.
Можно иметь проекты в виде массива поддокументов документа организации, но я бы предпочелиметь проекты как независимую коллекцию, поскольку должна быть возможность запросить всю коллекцию для просмотра проектов, не просматривая документы организации.