【问题标题】:Mongoengine Query using only() on list of reference fieldsMongoengine 使用 only() 查询引用字段列表
【发布时间】:2013-01-14 02:39:05
【问题描述】:

我有两个文件

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

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道select_related(),但这不是我想要的。我希望查询返回字符串标题列表而不是对象列表
    • 您仍然需要取消引用,这意味着执行另一个查询。目前,您无法返回单个字段,请向github.com/mongoengine/mongoengine 添加工单,请求此功能。
    • 使用 select_related() 后,_data 属性正确解引用并给出 Book 文档的对象,但 to_mongo() 仍然给出 DBRef 对象。这是一个错误吗?
    • 不作为 DBRef 存储在数据库中
    • 这个问题的最终解决方案是什么?
    猜你喜欢
    • 1970-01-01
    • 2019-05-05
    • 2013-01-11
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2016-09-04
    • 2017-10-04
    相关资源
    最近更新 更多