我对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)
上面的代码行给我一个错误,如下所示
TypeError:文档必须是dict,bson.son.SON,bson.raw_bson.RawBSONDocument的实例,或者是从collections.MutableMapping继承的类型的实例
information.insert_one(user_schema)
尝试这样做给我一个错误
无法编码对象:'str'对象的方法'capitalize',类型:类'method_descriptor'
任何帮助如何使用python在mongoDB中创建此架构的人,将不胜感激!
MongoDB使用BSON类型的JSON schema;您的架构不符合规范。
没有“强制”的概念,唯一性通过unique indexes处理。
我已经让您开始使用此代码片段,它可以带您到达那里,但您需要做很多您自己的研究。
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))