译自: 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 类型(如 UUID4
或 EmailStr
)一起使用。
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",
),
]
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...