Функция Mongoose для атрибутов Typecast для соответствия Schema - PullRequest
1 голос
/ 11 марта 2019

При использовании Model.find(match) атрибуты автоматически преобразуются в типы полей, определенные в Schema.

Это особенно полезно для логических значений и чисел, когда фильтры задаются из строки запроса, поскольку параметры строки запроса всегда имеют тип String.

Открыта ли эта функция?

Обоснование: приведение типов к схеме не происходит на этапе Model.aggregate().match(), поскольку, как только начинается агрегация, конвейер официально больше не имеет схемы (хотя теоретически первый этап идентичен обычному поиску).

По причинам, я хочу сделать что-то вроде следующего:

match = mongoose.applySchemaTypecasting(match, schema)

Возможно ли это?

1 Ответ

1 голос
/ 12 марта 2019

Я думаю, что один из способов сделать это - просто создать новый временный документ при каждом новом запросе, который будет автоматически вводить все поля в соответствии со схемой.Например: -

const doc = new Model(match);

Затем вы можете запустить document.validate, чтобы получить обещание определить, соответствует ли оно совпадению.

doc.validate(function (err) {
 if (err) handleError(err);
 else // validation passed
});

И тогда вы можете просто избежать сохраненияДокумент в базе данных.

Кроме того, после изучения исходного кода для mongoose, я заметил, что mongoose выполняет приведение типов отдельно для разных полей, а не для всего документа.Поэтому, возможно, не существует функции, доступной через api, чтобы сделать это для всего документа.

Однако вы можете использовать SchemaType.cast (), предоставляемый mongoose для этой функции для отдельных полей.Вот ссылка на документацию: - Mongoose SchemaTypecast

...