У меня есть фрагмент кода 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...
Проблема в том, что в описании схемы тип может быть указан как массив. то есть 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'
]
}
}