Yas*_*ngh 3 python schema json mongodb
我对 MongoDB 还很陌生。我将尽力在这里总结一下当前的问题。我已经提供了三种不同的 JSON 模式,我想使用 python 在 MongoDB 中创建此模式。我的代码如下:
import pymongo
client = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
mydb=client['UserDetails']
information = mydb.Userinformation
user_schema = {
'firstName': {
'type': 'string',
'minlength': 1,
'required': True,
'coerce': str.capitalize
},
'lastName': {
'type': 'string',
'minlength': 1,
'required': True,
'coerce': str.capitalize
},
'email': {
'type': 'string',
"required": False,
"coerce": str,
"nullable": True
},
'phoneNo': {
'type': 'integer',
'required': True,
'unique': True
},
'userId': {
'type': 'integer',
'required': True,
'unique': True
},
'patientId': {
'type': 'integer',
'required': True,
'unique': True
},
'age': {
'type': 'integer'
},
"userStatus": {
"type": "integer",
"nullable": True
}
}
information.insert_many(user_schema)
Run Code Online (Sandbox Code Playgroud)
上面的代码行给我一个错误,如下所示
TypeError: document 必须是 dict、bson.son.SON、bson.raw_bson.RawBSONDocument 的实例,或者继承自 collections.MutableMapping 的类型
信息.insert_one(user_schema)
尝试这个给了我一个错误
无法编码对象:“str”对象的方法“capitalize”,类型:类“method_descriptor”
任何有关如何使用 python 在 mongoDB 中创建此模式的帮助将不胜感激!
MongoDB 使用BSON 类型的JSON 模式;您的架构与规范不匹配。
没有“强制”的概念,唯一性是通过唯一索引来处理的。
我已经让您从这个代码片段开始,它可以帮助您完成一些工作,但是您需要做很多自己的研究。
from pymongo import MongoClient
from pymongo.errors import CollectionInvalid
from collections import OrderedDict
db = MongoClient("mongodb://localhost:27019/")['mydatabase']
user_schema = {
'firstName': {
'type': 'string',
'minlength': 1,
'required': True,
},
'lastName': {
'type': 'string',
'minlength': 1,
'required': True,
},
'email': {
'type': 'string',
"required": False,
},
'phoneNo': {
'type': 'int',
'required': True,
},
'userId': {
'type': 'int',
'required': True,
},
'patientId': {
'type': 'int',
'required': True,
},
'age': {
'type': 'int'
},
"userStatus": {
"type": "int"
}
}
collection = 'Userinformation'
validator = {'$jsonSchema': {'bsonType': 'object', 'properties': {}}}
required = []
for field_key in user_schema:
field = user_schema[field_key]
properties = {'bsonType': field['type']}
minimum = field.get('minlength')
if type(minimum) == int:
properties['minimum'] = minimum
if field.get('required') is True: required.append(field_key)
validator['$jsonSchema']['properties'][field_key] = properties
if len(required) > 0:
validator['$jsonSchema']['required'] = required
query = [('collMod', collection),
('validator', validator)]
try:
db.create_collection(collection)
except CollectionInvalid:
pass
command_result = db.command(OrderedDict(query))
Run Code Online (Sandbox Code Playgroud)