如何获取一个特定的嵌入式文档,例如通过ID与mongoengine进行比较?
这些是我的模特:
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的文献)?不知道我还能做什么
欢呼声
[当您进行查询时,它仍然指向带有Project
的特定liteature__id
文档。您必须使用filter
进行查询。
literature = Project.objects.filter(project_name=project_name,literature__id=id)
由于您正在对Project
进行查询,并且Literature
是其中的嵌入式文档,因此它仍然指向Project对象。