Áp dụng lược đồ

Nhập môn MongoDB với Python

Filip Schouwenaars

Machine Learning Researcher

Từ linh hoạt đến lược đồ được xác thực

  • MongoDB cho phép lưu dữ liệu không cần lược đồ cố định
  • Rất tốt cho tạo mẫu nhanh và phát triển mô hình dữ liệu
mov.insert_one({
    "title": "knives out",
    "genre": ["comedy", "crime", "drama"],
    "year": 2019, # oops
    "rating": 7.9,
})

mov.find_one({ "title": "knives out", "release_year": 2019 })
  • Khi lược đồ đã rõ, cần bật xác thực
Nhập môn MongoDB với Python

Áp dụng lược đồ với pydantic

  • Thư viện xác thực dữ liệu
  • Định nghĩa trường và kiểu mong đợi
  • Bản mẫu cho mọi tài liệu
from pydantic import BaseModel
from typing import Optional

class Movie(BaseModel):
    title: str
    genre: list[str]
    release_year: int
    rating: float
    won_oscar: Optional[bool] = None
Nhập môn MongoDB với Python

Chèn với mô hình dữ liệu có kiểu

# Trước
new_movie = {
  "title": "knives out",
  "genre": ["comedy", "crime", "drama"],
  "year": 2019, # oops
  "rating": 7.9,
}
# Không có đầu ra
  • Không kiểm tra định dạng dữ liệu
# Bây giờ
new_movie = Movie(
  title = "knives out",
  genre = ["comedy", "crime", "drama"],
  year = 2019, # oops
  rating = 7.9,
)
pydantic.error_wrappers.ValidationError:
1 validation error for Movie
release_year: field required
  • Lỗi chính tả và thiếu trường bị bắt trước khi vào collection!
Nhập môn MongoDB với Python

Sửa lỗi của chúng ta

from pydantic import BaseModel
from typing import Optional

class Movie(BaseModel):
    title: str
    genre: list[str]
    release_year: int
    rating: float
    won_oscar: Optional[bool] = None 
# Bộ trường và giá trị đúng
new_movie = Movie(
  title = "knives out",
  genre = ["comedy", "crime", "drama"],
  release_year = 2019,
  rating = 7.9,
)

mov.insert_one(dict(new_movie))
InsertOneResult(...)
Nhập môn MongoDB với Python

Xác thực lược đồ tích hợp của MongoDB

client.film.create_collection(
  "movies_v2",
  validator={
    "$jsonSchema": {
      "required": ["title", "genre", "release_year", "rating"],
      "properties": {
        "title": { "bsonType": "string" },
        "genre": { 
          "bsonType": "array",
          "items": { "bsonType": "string" }
        },
        "release_year": { "bsonType": "int" },
        "rating": { "bsonType": "double" },
        "won_oscar": { "bsonType": "bool" }
      }
    }
  }
)
Nhập môn MongoDB với Python

Kiểm thử xác thực lược đồ tích hợp của MongoDB

client.film.movies_v2.insert_one({
  "title": "knives out",
  "genre": ["comedy", "crime", "drama"],
  "year": 2019, # oops
  "rating": 7.9,
})
pymongo.errors.WriteError: Document failed validation, [...]
'missingProperties': ['release_year'], 'errmsg': 'Document failed validation'}
  • Xác thực lược đồ ở cấp cơ sở dữ liệu
  • Hoạt động cho mọi ứng dụng truy cập MongoDB
Nhập môn MongoDB với Python

Tóm tắt

  • Xác thực phía ứng dụng: pydantic.BaseModel
  • Xác thực phía cơ sở dữ liệu: xác thực lược đồ tích hợp của MongoDB
  • Ngăn lỗi nhập liệu
  • Ép buộc cấu trúc
Nhập môn MongoDB với Python

Ayo berlatih!

Nhập môn MongoDB với Python

Preparing Video For Download...