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
デフォルトでは、クエリセットにはフィールドの値が含まれていません。これを行う必要があります-(text_list
クエリセット内の各オブジェクトのフィールドの値を取得するため。
for s in Server.objects.all():
print s.text_list
私の場合/シナリオでは、これを行うことはできません。つまり、クエリセット自体ですべてのデータを取得する必要があることを意味します(つまり、を使用せずに、ネストされたすべての詳細を取得するクエリセットが必要ですobj.text_list
)
例えば
さらにmongo shell -
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()
メソッドを使用して、mongoengine ormでこの問題を解決できます
json.loads(queryset.to_json())
Server.objects.all().to_json()
埋め込みモデルの情報を含む結果を返しますが、何百万ものドキュメントでページネーションを使用する場合、これは効率的ではありません。その場合、mongo はすべてのオブジェクトを to_json に変換しようとします。