如何为Reference Field Mongoengine创建索引



我想为 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。

最新更新