私は、MongoEngine の ReferenceField もこのフィールドのインデックスを作成すると信じていました。MongoEngine は Django ORM スタイルから多くを継承しているため、ForeignKeys のインデックスを作成します。これがここでも発生することを期待していました。
たとえば、次の 2 つの単純なドキュメント定義があります。
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 秒かかりました..パフォーマンスの議論は非常に明確です。