使用Model.find(match)
时,属性会自动类型转换为Schema
中定义的字段类型。
当从查询字符串中指定过滤器时,这对于布尔值和数字特别有用,因为查询字符串参数始终为String
类型。
此功能是否公开?
合理性:Model.aggregate().match()
阶段不会进行模式类型转换,因为一旦开始聚合,管道就正式不再具有模式(尽管理论上第一阶段与常规查找相同)。 / p>
出于某种原因,我想执行以下操作:
match = mongoose.applySchemaTypecasting(match, schema)
这可能吗?
答案 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