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デフォルトでは、クエリセットにはフィールドの値が含まれていません。これを行う必要があります-(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 に変換しようとします。

4

1 に答える 1

0

フラスコモンゴエンジンを使用してクエリセットの結果をページ分割したい場合は、単に次のpaginateメソッドを使用する必要がありQuerysetます。

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

ここでは、テンプレート部分と利用可能なその他の機能に関する詳細情報を見つけることができます。

于 2016-05-05T13:14:24.407 に答える