猫鼬函数类型转换属性以匹配架构

时间:2019-03-11 18:34:17

标签: mongoose mongoose-schema

使用Model.find(match)时,属性会自动类型转换为Schema中定义的字段类型。

当从查询字符串中指定过滤器时,这对于布尔值和数字特别有用,因为查询字符串参数始终为String类型。

此功能是否公开?

合理性:Model.aggregate().match()阶段不会进行模式类型转换,因为一旦开始聚合,管道就正式不再具有模式(尽管理论上第一阶段与常规查找相同)。 / p>

出于某种原因,我想执行以下操作:

match = mongoose.applySchemaTypecasting(match, schema)

这可能吗?

1 个答案:

答案 0 :(得分:1)

我认为一种解决方法是在每个新请求上创建一个新的临时文档,该文档将根据架构自动对所有字段进行类型转换。 例如:-

const doc = new Model(match);

然后您可以运行document.validate来确定是否匹配。

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

然后您可以简单地避免将文档保存在数据库中。

此外,在查看了猫鼬的源代码之后,我注意到猫鼬会分别针对不同的字段而不是整个文档进行类型转换。因此,可能没有通过api提供的功能可以对整个文档进行处理。

但是,您可以使用猫鼬公开的SchemaType.cast()到各个字段的SchemaType.cast()。 这是文档的链接:- Mongoose SchemaTypecast