Mongoengine查询仅使用引用字段列表上的()

时间:2013-01-30 10:07:40

标签: python mongodb mongoengine

我有两份文件

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']
}

1 个答案:

答案 0 :(得分:2)

如果您需要取消引用图书,请致电select_related,例如:

author = Author.objects.filter(name='xyz').only(*req_fields).select_related()
相关问题