json架构日期验证不适用于mongodb

json架构日期验证不适用于mongodb,mongodb,jsonschema,Mongodb,Jsonschema,我正在为nodejs使用npmjsonschema模块,我非常简单的json模式如下所示: "title": "ticket", "type": "object", "properties": { "_id" : {"type": "string"}, "created": {"type": "string", "format": "date-time"} }, "additionalProperties" : fa

我正在为nodejs使用npm
jsonschema
模块,我非常简单的json模式如下所示:

    "title": "ticket",
    "type": "object",
    "properties": {
        "_id"    : {"type": "string"},
        "created": {"type": "string", "format": "date-time"} 
    },
    "additionalProperties" : false
我通过该模式验证的数据存储在mongodb中。问题是created属性有一个带有expireAfterSeconds的索引,用于在一定时间后自动删除这些记录

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

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

instance.created is not of a type(s) string
Ofc我可以将insert和update上的所有日期字段从已验证的字符串转换为日期类型,但这还不够,因为在读取时,我将拥有具有真实日期类型的数据,这些数据在下次更新时将无法通过验证。所以我可以在从日期到字符串的每次读取中包含一个反向转换,但这个解决方案对我来说仍然不够好


还有其他想法吗?

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

{
  "type": "object",
  "properties": {
    "someDate": {
      "instanceof": "Date"
    }
  }
}

日期必须是字符串吗?为什么不能将其存储为“ISOdate”(mongodb的原生日期类型)?另外,您是否必须使用json模式进行验证,或者是否可以用MongoDB本身进行验证来代替它?它必须是一个日期!问题是,如果我将日期作为日期类型发送,json验证将失败。替换json模式验证目前还不可能,因为我们将其用于不同的数据库,而这些数据库没有内置验证。现在,我已经在保存前和读取后创建了自定义触发器,用于处理日期字段。好的,从MongoDB的角度来看,将其存储为实际日期更为正确,但当然,如果其他系统需要一个外部字符串。实际上,您可以在MongoDB本身中实施模式。