Подтвердить что ты не робот

Как я могу проверить тип в MongoDB?

Пример здесь

http://mongoosejs.com/docs/populate.html

Предоставляет следующий код

var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: aaron._id
  });

_creator определяется выше следующим образом

_creator : { type: Schema.ObjectId, ref: 'Person' }

Если я изменю код на следующий

  var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: {name: 'test'}
  });

Кажется, что с радостью вставить данные в MongoDB.

{ "title" : "A man who cooked Nintendo", "_creator" : { "name" : "test" }, "_id" : ObjectId("4fb7a55315c5f2de07000002"), "fans" : [ ] }

Как я поймаю ошибку перед вставкой? Я хотел бы проверить, что это не только ObjectId, но также и то, что он соответствует действительному Person.

4b9b3361

Ответ 1

Чтобы продолжить то, что предложил @JohnnyHK, вот полное решение (предполагая, что _creator является ссылкой на числовой идентификатор).

Если вы хотите проверить, является ли значение допустимым ObjectId

function isObjectId(n) {
  return mongoose.Types.ObjectId.isValid(n);
}

validate: [validator, 'my error type']

_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId }

Ответ 2

Метод isValid не существует (больше?), ваш лучший выбор - простое регулярное выражение, как предусмотрено здесь

Ответ 3

Вы можете добавить подтверждение в поле _creator схемы, как описано здесь.

_creator : { type: Schema.ObjectId, ref: 'Person', validate: ... }