我想为 ReferenceField
创建索引,以便查询可以更快地工作,但是我不知道如何通过在类meta
属性中定义该索引使用mongoengine
:
这是我编写的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创建索引时,请小心。默认情况下,库总是试图每次插入时创建索引。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",
]
}
,他们具有分离的命令来运行索引创建,就像您在任何其他数据库中所做的那样
要创建MongoEngine中参考字段的索引,您只需要指定字段的名称 - 没有后缀.$id
即可。
,您的代码就是这样:
meta = {
'collection': 'social_posts',
'indexes': [
'user_id'
]
}
mongoengine即使是一个dbref。