0
import mongoengine 

class MyLog(mongoengine.EmbeddedDocument): 
    text = mongoengine.StringField() 

class Server(mongoengine.DynamicDocument): 
    name = mongoengine.StringField() 
    status = mongoengine.StringField() 
    text_list = mongoengine.ListField(mongoengine.EmbeddedDocumentField(MyLog)) 

Server.objects.all()クエリセットは、デフォルトではtext_listフィールドの値が含まれていません。 私はthis-を行うにしました(クエリセット内の各オブジェクトのためにtext_listフィールドの値を取得する。mongoengineフィルタクエリ埋め込まれた文書を検索

for s in Server.objects.all(): 
    print s.text_list 

を私の場合/シナリオでは、私はこれを行うことはできません、私は内のすべてのデータを取得する必要があります意味しますモンゴシェルに例えばさらに

ために自分自身をクエリセット(または他の言葉で、私はobj.text_listを使用せずにも私にすべてのネストされた詳細を与えるクエリセットを持っている必要があります)

- db.server.find()が埋め込まれたすべてのネストされたが含まドキュメント。

{ 
    '_id': ObjectId("272742942qbe5451b4f4b9e7"), 
    'name':'nm', 
    'status': 'st', 
    'text_list': [ 
     {# here it's including embedded model's info too, no need to make extra query, looking for similar query in mongoengine orm 
     'text': 'done' 
     } 
    ] 
} 

ormまたはraw_queryを使用してmongoengineでこれを行う方法を教えてください。

私はto_json()方法

json.loads(queryset.to_json())

Server.objects.all().to_json()を使用してmongoengineのORMでこの問題を解決することができますが、埋め込まれたモデルの情報を含むが、何百万もの文書にページネーションを使用した場合、これは効率的ではない結果を返す、私はそれで意味しますcase mongoはすべてのオブジェクトをto_jsonに変換しようとします。

+1

質問を明確にしてください。最初に結果が含まれていないと言って、インスタンス属性を使用して結果にアクセスできると言っています。 – lesingerouge

+0

@lesingerouge:更新された質問の詳細。 – Wendy

+0

@lesingerougeと同様に、あなたが望むものは不明です。クエリセットは、インスタンス属性としてアクセスできる埋め込みフィールドを持つドキュメントを返します。ほかに何か? –

答えて

0

あなたはフラスコ-mongoengineを使用して、クエリセットの結果をページ分割したい場合、あなたは、単にQuerysetpaginate方法を使用する必要があります

# Paginate through todo 
def view_todos(page=1): 
    paginated_todos = Todo.objects.paginate(page=page, per_page=10) 

Hereを使用すると、テンプレートの一部やその他の機能についての詳細情報を見つけることができます利用可能です。

関連する問題