【问题标题】:pymongo insert timestamp validation errorpymongo插入时间戳验证错误
【发布时间】:2020-12-05 00:34:02
【问题描述】:

我有一个具有给定架构的集合:

 {
            "name" : "check3",
            "type" : "collection",
            "options" : {
                "validator" : {
                    "$jsonSchema" : {
                        "bsonType" : "object",
                        "properties" : {
                            "TIMEDESC" : {
                                "bsonType" : "timestamp"
                            },
.............
...........

当我尝试插入文档时出现验证错误:

import datetime
from pymongo import MongoClient

db = MongoClient()['poc']
data = {
    'TIMEDESC': datetime.datetime.now()
}
mycol = db['check3']
x = mycol.insert_one(data)

pymongo.errors.WriteError:文档验证失败,完全错误: {'index': 0, 'code': 121, 'errmsg': '文档验证失败'}

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    您需要存储日期的 bsonType 是“日期”。

    【讨论】:

      【解决方案2】:

      MongoDB Timestamp docs 请注意:

      BSON 时间戳类型供 MongoDB 内部使用。大多数情况下,在应用程序开发中,您会希望使用 BSON 日期类型。有关详细信息,请参阅日期。

      因此,最好切换到 Date 类型。

      在模式验证中,由于 JSON 不支持日期类型,因此有时更容易验证 MongoDB 期望的字符串格式作为日期。使用JSONSchema 之类的工具会得到以下结果:

      "properties": {
          "type": "string",
          "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"
      }
      

      这将验证 JSON 是否以 2020-01-01T00:00:00Z 的形式正确表示日期。

      【讨论】:

      • 如果 OP 要添加 pymongo datetime.datetime 类型,驱动程序会将其映射到 BSON date 类型,而不是字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2020-11-06
      • 2021-12-01
      • 2016-05-29
      • 2022-11-24
      相关资源
      最近更新 更多