Ошибка проверки схемы MongoDb, когда схема указала ['string'] в качестве атрибута типа bson

У меня есть фрагмент кода Python, который использует библиотеку PyMongo для вставки в мою коллекцию mongodb, размещенную в MongoDB Atlas.

Я пытаюсь вставить следующий документ в коллекцию под названием Customer, развернутую в Atlas, с помощью вызова Insert_many().

{'Source': ['LoanDelivery_2022-03-31'], 'CustID': 1, 'CustName': 'Seexxx', 'CustPhone': '940xxxxx', '_id': ObjectId('66ca8d5873a3fdxxxx')}

Схема сбора следующая.

{
  $jsonSchema: {
    title: 'Customers_Schema',
    properties: {
      CustID: {
        bsonType: 'int'
      },
      CustName: {
        bsonType: 'string'
      },
      CustPhone: {
        bsonType: 'string'
      },
      CustAddress: {
        bsonType: 'string'
      },
      Source: {
        bsonType: [
          'string'
        ],
        description: 'Sources of the record'
      }
    },
    required: [
      'CustID',
      'CustName',
      'Source'
    ]
  }
}

Я получаю сообщение об ошибке, в котором говорится, что рассматриваемый тип источника является массивом, а ожидаемый тип — ['строка']. Разве эти два типа не эквивалентны, и Pymongo должен автоматически выполнить двоичное преобразование? Есть ли какое-либо преобразование типов, которое мне нужно выполнить в моем коде Python, прежде чем я напишу в MongoDB?

Вот фрагмент объекта BulkWriteError, созданного операцией записи.

{'operatorName': 'bsonType', 'specifiedAs': {'bsonType': [...]}, 'reason': 'type did not match', 'consideredValue': ['LoanDelivery_2022-03-31'], 'consideredType': 'array'}
special variables
function variables
'operatorName' =
'bsonType'
'specifiedAs' =
{'bsonType': ['string']}
'reason' =
'type did not match'
'consideredValue' =
['LoanDelivery_2022-03-31']
'consideredType' =
'array'

массив должен быть указан по-другому, см. пример по этой ссылке mongodb.com/blog/post/…

dododo 25.08.2024 04:44

спасибо, это полезно... кроме того, я также получал ошибку несоответствия типов в моем поле CustID, потому что схема изначально была определена с длинным типом в схеме проверки в Mongo DB для этой коллекции. Это несмотря на явное приведение к типу Python int перед записью в Mongo DB. Сейчас я вернул это значение в схему к int, но было бы здорово, если бы у вас были какие-нибудь подсказки о том, как работать с атрибутами bson длинного типа ((int64)) в схеме.

GabT 25.08.2024 14:52

см. mongodb.com/docs/manual/reference/operator/query/jsonSchema/‌​…, поддерживается long

dododo 25.08.2024 16:35
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что в описании схемы тип может быть указан как массив. то есть bsonType: 'string' и bsonType: ['string'] одинаковы.

Исправленная схема следующая:

   {
    $jsonSchema: {
    title: 'Customers_Schema',
    properties: {
      CustID: {
        bsonType: 'int'
      },
      CustName: {
        bsonType: 'string'
      },
      CustPhone: {
        bsonType: 'string'
      },
      CustAddress: {
        bsonType: 'string'
      },
      Source: {
        bsonType: [
          'array'
        ],
        description: 'Sources of the record',
        minItems: 1,
        items: {
           bsonType: ['string']
        }
      }
    },
    required: [
      'CustID',
      'CustName',
      'Source'
    ]
  }
}

Повторяю комментарий выше, если вы можете помочь. Спасибо, это полезно... кроме того, я также получал ошибку несоответствия типов в моем поле CustID, потому что схема изначально была определена с длинным типом в схеме проверки в Mongo DB для этой коллекции. И это несмотря на явное приведение к типу Python int перед записью в Mongo DB. Теперь я вернул этот атрибут в схему на int, но было бы здорово, если бы у вас были какие-нибудь указания о том, как работать с атрибутами bson длинного типа ((int64)) в схеме, не получая несоответствия типов int и long.

GabT 25.08.2024 14:54

Другие вопросы по теме