4

私は2つのドキュメントを持っています

class Book(Document):
    title = StringField()
    publication = StringField()
    no_of_pages = IntField()
    desc = StringField()
    reviews = ListField(ReferenceField(Review))
    ...

class Author(Document):
    name = StringField()
    books = ListField(ReferenceField(Book))
    desc = StringField()
    ...

著者の名前を指定して、彼の本のすべてのタイルを検索するクエリを作成したいと思います。

両方のドキュメントに多数の列があることがわかるように、すべての列を取得する必要はありません。したがって、私の必須フィールドは

`req_fields = ['name', 'books']`

そして私はこれを次のように照会します

author = Author.objects.filter(name='xyz').only(*req_fields)

authorオブジェクトを印刷すると、次のようになります。

{
_id=ObjectId('50fcf9682c345a0427000019'),
_cls='Author',
name='xyz',
books=[DBRef('Book', ObjectId('50fcd9682c441e0427000019')), 
DBRef('Book', ObjectId('50fcd9682c361e0427000020'))]
}

ブックオブジェクトのリストではなく、タイトルの文字列のリストを返すクエリが必要です。どうすればこれを変更できますか?結果オブジェクトが次のようになるように

{
_id=ObjectId('50fcf9682c345a0427000019'),
_cls='Author',
name='xyz',
books=['Title One', 'Title Two']
}
4

1 に答える 1

7

書籍の逆参照が必要な場合は、select_related たとえば次のように呼び出します。

author = Author.objects.filter(name='xyz').only(*req_fields).select_related()
于 2013-01-30T10:47:23.483 に答える