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

164
23

Пример здесь


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.

спросил(а) 2021-01-19T14:08:08+03:00 8 месяцев назад
1
Решение
208

Чтобы продолжить то, что предложил @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 }

ответил(а) 2021-01-19T14:08:08+03:00 8 месяцев назад
121

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

ответил(а) 2021-01-19T14:08:08+03:00 8 месяцев назад
64

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


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

ответил(а) 2021-01-19T14:08:08+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема