首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >json模式日期验证不适用于mongodb

json模式日期验证不适用于mongodb
EN

Stack Overflow用户
提问于 2017-08-15 22:44:30
回答 1查看 1.9K关注 0票数 1

我对nodejs使用npm jsonschema模块,我非常简单的json模式看起来像这样:

代码语言:javascript
复制
    "title": "ticket",
    "type": "object",
    "properties": {
        "_id"    : {"type": "string"},
        "created": {"type": "string", "format": "date-time"} 
    },
    "additionalProperties" : false

我通过这个模式验证的数据存储在mongodb中。问题是created属性有一个带有expireAfterSeconds的索引,可以在一段时间后自动删除这些记录。

现在我有以下问题。如果我发送一个字符串(不管根据json规范它是有效的还是无效的),数据库中的文档也创建了类型为string的属性,因为mongo db是无模式的,并且我不能将该属性预定义为date类型。例如,如果我将带有created属性的数据作为mongo ISO字符串发送,尽管2017-08-15T14:34:18.839Z日期属性看起来非常相似,但它们仍然是字符串。Ofc这打破了过期逻辑。

如果我为创建的属性发送带有实际日期的数据,JSON验证将失败,并显示

代码语言:javascript
复制
instance.created is not of a type(s) string

Ofc我可以将insert和update中的所有日期字段从验证字符串转换为date类型,但这是不够的,因为在读取时,我将具有真实日期类型的数据,这些数据在下一次更新时将无法通过验证。因此,我可以在每次从日期读取到字符串时都包含一个反向转换,但这个解决方案对我来说仍然不够好。

还有其他想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 03:58:52

不熟悉jsonschema,但如果您要使用ajv,则可以使用自定义关键字和验证,例如:

代码语言:javascript
复制
{
  "type": "object",
  "properties": {
    "someDate": {
      "instanceof": "Date"
    }
  }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45695312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档