如何为 ReferenceField mongoengine 创建索引
How to create index for ReferenceField mongoengine
我想为 ReferenceField
创建索引以便查询可以更快地工作,但我不知道如何使用 mongoengine
通过在 class meta
属性:
这是我写的 Post
文档代码:
class Post(Document):
slug = StringField(max_length=60, required=True)
content = StringField(required=True)
user_id = ReferenceField(document_type='User', dbref=True, required=True)
published_at = DateTimeField(default=datetime.now, required=True)
updated_at = DateTimeField(default=datetime.now, required=True)
meta = {
'collection': 'social_posts',
'indexes': [
'user_id.$id'
]
}
当我尝试为 user_id.$id
创建索引(这是 ReferenceField
存储在 mongodb
中的方式时,抛出以下错误:
mongoengine.errors.LookUpError: Cannot perform join in mongoDB: user_id__$id
要在 mongoengine 中创建 ReferenceField 的索引,您只需指定字段名称 - 不带后缀 .$id
。
所以你的代码应该是这样的:
meta = {
'collection': 'social_posts',
'indexes': [
'user_id'
]
}
Mongoengine 会自动在引用的 id 上创建索引,即使它是一个 DBRef。
使用MongoEngine创建索引时请小心。默认情况下,库总是尝试在您每次插入内容 时创建一个索引。 MongoDB 中的索引创建是一个会导致性能问题的阻塞操作。
你应该始终避免它。我的建议是执行以下操作
import mongoengine as me
class MongoModel(me.Document):
some_field = me.StringField()
other_field = me.StringField()
meta = {
"auto_create_index": False,
"index_background": True,
"indexes": [
"other_field",
]
}
并且他们有一个单独的命令来 运行 创建索引,就像您在任何其他数据库中所做的那样
我想为 ReferenceField
创建索引以便查询可以更快地工作,但我不知道如何使用 mongoengine
通过在 class meta
属性:
这是我写的 Post
文档代码:
class Post(Document):
slug = StringField(max_length=60, required=True)
content = StringField(required=True)
user_id = ReferenceField(document_type='User', dbref=True, required=True)
published_at = DateTimeField(default=datetime.now, required=True)
updated_at = DateTimeField(default=datetime.now, required=True)
meta = {
'collection': 'social_posts',
'indexes': [
'user_id.$id'
]
}
当我尝试为 user_id.$id
创建索引(这是 ReferenceField
存储在 mongodb
中的方式时,抛出以下错误:
mongoengine.errors.LookUpError: Cannot perform join in mongoDB: user_id__$id
要在 mongoengine 中创建 ReferenceField 的索引,您只需指定字段名称 - 不带后缀 .$id
。
所以你的代码应该是这样的:
meta = {
'collection': 'social_posts',
'indexes': [
'user_id'
]
}
Mongoengine 会自动在引用的 id 上创建索引,即使它是一个 DBRef。
使用MongoEngine创建索引时请小心。默认情况下,库总是尝试在您每次插入内容 时创建一个索引。 MongoDB 中的索引创建是一个会导致性能问题的阻塞操作。
你应该始终避免它。我的建议是执行以下操作
import mongoengine as me
class MongoModel(me.Document):
some_field = me.StringField()
other_field = me.StringField()
meta = {
"auto_create_index": False,
"index_background": True,
"indexes": [
"other_field",
]
}
并且他们有一个单独的命令来 运行 创建索引,就像您在任何其他数据库中所做的那样