【问题标题】:How to create schema in MongoDB using python?如何使用 python 在 MongoDB 中创建模式?
【发布时间】:2020-07-19 07:22:03
【问题描述】:

我对 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: document 必须是 dict、bson.son.SON、bson.raw_bson.RawBSONDocument 或继承自 collections.MutableMapping 的类型的实例

information.insert_one(user_schema)

尝试这样做会给我一个错误

无法编码对象:“str”对象的“capitalize”方法,类型:“method_descriptor”类

任何关于如何使用 python 在 mongoDB 中创建此模式的帮助将不胜感激!

【问题讨论】:

  • 您希望这是数据库架构吗?或者您只是想将该数据插入到集合中?
  • 是的,我希望它是一个数据库模式。但我想我在这里要做的是插入到一个集合中。简单的插入不会起作用吗?如果不能,请指导制作数据库架构。
  • str.capitalize 是一个无法编码并存储在数据库中的函数。这就是您收到 BSON 错误的原因。该值需要有效的 python 数据类型。
  • 你试过mongoengine吗?请参阅此处的指南realpython.com/introduction-to-mongodb-and-python/…

标签: python json mongodb schema


【解决方案1】:

MongoDB 使用 BSON 类型的JSON schema;您的架构与规范不符。

没有“强制”的概念,唯一性通过unique indexes 处理。

我已经让你开始使用这段代码 sn-p 来帮助你实现一些目标,但这是你自己需要做的很多研究。

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多