python - 如何为ReferenceField mongoengine创建索引

标签 python mongodb indexing pymongo mongoengine

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

相关文章:

php - Laravel MongoDB 分组依据

azure - DocumentDB 和 Azure 搜索 : Document removed from documentDB isn't updated in Azure Search index

postgresql : read GIN index content

indexing - 用于 numpy 数组的 Cython 附加类型和 cimport 会降低性能吗?

python - pydoc.render_doc() 添加字符 - 如何避免这种情况?

python - VSCode/Pylint 在同一目录中找不到模块

python解码fernet key

Python type() 函数返回一个可调用对象

mongodb - Doctrine ODM - 浮点字段不适用于小数字段

java - 从辅助 mongodb 数据库读取数据