我相信 MongoEngine 中的 ReferenceField 也会为这个字段创建一个索引。由于 MongoEngine 从 Django ORM 样式中继承了很多内容,并且它为其 ForeignKeys 创建了一个索引。我期待这也会发生在这里。
例如,我有这两个简单的文档定义:
import mongoengine as me
class Group(me.Document):
name = me.StringField()
meta = {'collection': 'groups'}
class Item(me.Document):
name = me.StringField()
group = me.ReferenceField(Group)
如果我在 mongodb CLI 中查找索引,ReferenceField 没有索引:
> db.item.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "me_tests.item",
"name" : "_id_"
}
]
>
有什么理由不这样做吗?
我在使用约 60000 个项目的生产服务器时遇到问题,查找所有项目组需要约 234 秒。但是当我索引 ReferenceField 时。我将这个数字降低到约 2 秒。所以我猜性能论点很清楚。