0

Object-Document マッパーとして mongoengine を使用しています。問題の原因となっているコレクションの簡単な説明を次に示します。コレクション A の各ドキュメントは、コレクション B のドキュメントへの参照のリストを持つことができます。

class A(Document): 
    list_b = ListField(EmbeddedDocumentField(EB))
    #other fields are not mentioned.

class EB(EmbeddedDocument):
    b_reference = ReferenceField('B')
    loc = GeoPointField()

class B(Document):
    name = StringField()
    #other fields are not mentioned.

特定のドキュメントのリスト オブジェクトにアクセスしようとすると、

document_of_A.list_b

上記の行の実行時間は、リストに存在する参照の数によって異なります。たとえば。リスト内の 100 件の参照に 100 ミリ秒かかります。

上記の行の実行時間を短縮するために、参照を取得するより良い方法はありますか?

4

1 に答える 1

2

select_relatedすべての参照をすばやく取得したい場合は、照会時にフラグを使用する必要があります。参照ルックアップには追加のクエリが必要でありselect_related()、mongodb への往復回数を減らすように設計されていることに注意してください。

# Single document lookup
document_of_A.select_related(2)

# Queryset
A.objects.select_related(2)

select_related ルックアップでなぜ 2 なのですか? さて、再帰的な深さは次のとおりです。

  1. リスト自体の参照を調べます
  2. 個々の埋め込みドキュメントで参照を検索する
于 2013-04-23T10:25:46.760 に答える