mongoose js: следует ли встраивать документы, когда поле не является списком? - PullRequest
0 голосов
/ 03 января 2012

Ниже моя схема.

var UserModel = new Schema({
    id: ObjectId
  , email: String
  , firstName: String
  , lastName: String
  , password: String
});

var MessageModel = new Schema({
    id: ObjectId
  , createdDate: { type: Date, default: Date.now }
  , user: String // should this be [UserModel]?
  , body: String
});

В моем случае у каждого сообщения есть пользователь, но только один. Должен ли я встраивать UserModel или я должен оставить поле пользователя в виде строки. Одним из будущих вариантов использования будет возвращение запроса с телом сообщения, датой создания и пользователем (объединенные имя и фамилия). Спасибо.

1 Ответ

1 голос
/ 03 января 2012

Краткий ответ: Нет, вы не должны использовать UserModel в качестве вложенного документа MessgeModel.

Длинный ответ: во-первых, пересмотрите свое наименование. Вы на самом деле определяете схемы здесь. Позже вы будете связывать модель с каждой из этих схем. Таким образом, UserSchema и MessageSchema были бы более подходящими здесь.

Но это не уместно. Что касается вашего вопроса, ваша схема MessageModel не должна содержать встроенные документы, представляющие пользователей, если нет отношения 1 к 1. Тем не менее, я ожидаю, что каждый пользователь будет связан со многими сообщениями (надеюсь). Таким образом, вы не хотите новую копию пользователя (каждый с новым _id) для каждого сообщения, которое он создает. Вам нужен только один канонический документ для каждого пользователя и ссылка на него в MessageModel.

Теперь использование строковой ссылки может быть правильным выбором для вас. Но если вы ожидаете выполнить запрос к MessageModel, в котором вы хотите, чтобы атрибут user заполнялся фактическим документом UserModel, то вам нужно будет использовать ref .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...