我正在为nodejs使用npm jsonschema
模块,我的非常简单的json架构如下所示:
"title": "ticket",
"type": "object",
"properties": {
"_id" : {"type": "string"},
"created": {"type": "string", "format": "date-time"}
},
"additionalProperties" : false
我通过此架构验证的数据存储在mongodb中。问题是创建的属性有一个带有expireAfterSeconds的索引,可以在一定的时间后自动删除这些记录。
现在我有以下问题。如果我发送一个字符串(无论它是否有效或根据json规范无效),数据库中的文档也创建了类型字符串的属性,因为mongo db是无模式的,我不能预定义该属性作为日期类型。例如,如果我将带有created属性的数据作为2017-08-15T14:34:18.839Z
ISO字符串发送,尽管mongo日期属性看起来非常相似,但它们仍然是字符串。 Ofc打破了过期逻辑。
如果我使用创建的属性的实际日期发送我的数据,则JSON验证将失败并显示
instance.created is not of a type(s) string
Ofc我可以转换插入的所有日期字段并从验证字符串更新到日期类型,但这还不够,因为在读取时我会得到具有实际日期类型的数据,这些数据在下次更新时将无法通过验证。所以我可以在每个从日期到字符串的读取中包含一个反向转换,但这个解决方案对我来说还不够好。
还有其他想法吗?
答案 0 :(得分:0)
不熟悉jsonschema,但是如果您要使用ajv,则可以使用自定义关键字和验证,例如:
{
"type": "object",
"properties": {
"someDate": {
"instanceof": "Date"
}
}
}