【问题标题】:Mongoengine: How to get one specific embedded document?Mongoengine:如何获取一个特定的嵌入文档?
【发布时间】:2020-05-12 01:46:47
【问题描述】:

如何获取一个特定的嵌入文档,例如通过 mongoengine 的 ID?

这些是我的模型:

class Project(Document):
    project_name = StringField(unique=True, required=True)
    literature = ListField(EmbeddedDocumentField(Literature))

class Literature(EmbeddedDocument):
    id = ObjectIdField(required=True, default=ObjectId,
                        unique=True, primary_key=True, sparse=True)
    title = StringField()

我想获得一个特定的文学对象,例如通过 id "2"。

我试过这个:

literature = Project.objects(project_name=project_name).get(
        literature__id=2).literature

但这给了我所有文献对象,而不仅仅是 ID 为“2”的对象

我也试过这样的:

literature = Project.objects.get(project_name=project_name).literature.filter(
        literature__id=2)

但这会引发错误AttributeError: 'BaseList' object has no attribute 'filter'

那么有没有办法只获取特定的嵌入文档(ID= 2 的文献)?不知道我还能做什么

干杯

【问题讨论】:

    标签: python mongodb flask mongoengine


    【解决方案1】:

    当您进行查询时,它仍然会指向特定的Project 文档,其中提到了liteature__id。您必须使用filter 进行查询。

    literature = Project.objects.filter(project_name=project_name,literature__id=id)

    这仍将指向 Project 对象,因为您正在对 Project 进行查询,而 Literature 是其中的嵌入文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多