Ошибка проверки схемы 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 Atlas - это управляемый сервис баз данных MongoDB, предоставляемый компанией MongoDB, Inc...


50
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'
    ]
  }
}