我想为 ReferenceField
创建索引所以查询可以更快地工作,但我不知道如何使用 mongoengine
来做到这一点通过在类 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 创建索引时请小心。默认情况下,库每次插入内容时都会尝试创建索引。 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",
]
}
并且它们有一个单独的命令来运行索引创建,就像在任何其他数据库中一样
关于python - 如何为ReferenceField mongoengine创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45960493/