【Beanie】索引设置

随笔8个月前发布
151 0 0

译自: https://github.com/roman-right/beanie/blob/main/docs/tutorial/indexes.md

合集更新中,详参: https://www.jianshu.com/nb/54751375

使用Beanie设置索引的方式不止一种

索引函数

要为单个字段设置索引,可以使用Indexed函数来包装类型,不需要Settings类:

from beanie import Document, Indexed


class Sample(Document):
    num: Annotated[int, Indexed()]
    description: str

Indexed函数接受一个可选的index_type参数,可以设置为 pymongo 的索引类型:

import pymongo

from beanie import Document, Indexed


class Sample(Document):
    description: Annotated[str, Indexed(index_type=pymongo.TEXT)]

Indexed函数还支持 PyMongo 的 IndexModel kwargs 参数(详细信息请参见PyMongo 文档)。

例如,要创建一个unique索引:

from beanie import Document, Indexed


class Sample(Document):
    name: Annotated[str, Indexed(unique=True)]

Indexed函数也可以直接在类型注释中使用,将其作为第一个参数传递给被包装的类型。请注意,这可能无法与某些 Pydantic V2 类型(如 UUID4EmailStr)一起使用。

from beanie import Document, Indexed


class Sample(Document):
    name: Indexed(str, unique=True)

多字段索引

内部 Settings 类的 indexes 字段负责处理更复杂的索引。
它是一个列表,其中的项可以是:

  • 单个键。文档字段的名称(这相当于使用上述的 Indexed 函数,没有任何额外的参数)
  • (键,方向) 对的列表。键 – 字符串,文档字段的名称。方向 – pymongo 方向(例如:pymongo.ASCENDING
  • pymongo.IndexModel 实例 – 最灵活的选项。PyMongo 文档

import pymongo
from pymongo import IndexModel

from beanie import Document


class Sample(Document):
    test_int: int
    test_str: str

    class Settings:
        indexes = [
            "test_int",
            [
                ("test_int", pymongo.ASCENDING),
                ("test_str", pymongo.DESCENDING),
            ],
            IndexModel(
                [("test_str", pymongo.DESCENDING)],
                name="test_string_index_DESCENDING",
            ),
        ]

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...