用mongo引擎查询嵌入式文档

2024-10-03 23:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我使用mongoengine来查询嵌入的文档。你知道吗

架构:项目

class _StatusFields(mongoengine.EmbeddedDocument):
    start_time = mongoengine.DateTimeField()

class _Status(mongoengine.EmbeddedDocument):
    start = mongoengine.EmbeddedDocumentField(
        _StatusFields, default=_StatusFields()
    )
    complete = mongoengine.EmbeddedDocumentField(
        _StatusFields, default=_StatusFields()
    )
class Project(mongoengine.Document):
    status = mongoengine.EmbeddedDocumentField(_Status,  default=_Status),
    location = mongoengine.StringField()

如您所见,我使用\u状态作为项目中的嵌入文档。我需要在项目中查询状态,即嵌入式文档。你知道吗

这是我尝试过的代码:

filter = {'status__in': ['complete']}
project_objects = Project.objects(**filter).all()

但我有个错误: mongoengine.errors.InvalidQueryError: Querying the embedded document '_Status' failed, due to an invalid query value

它适用于字符串和objectid,但似乎不能添加嵌入文档。你知道吗

有人能告诉我什么是正确的方式来查询嵌入的文档吗?你知道吗


Tags: 项目文档projectdefault状态statusfilterstart
1条回答
网友
1楼 · 发布于 2024-10-03 23:24:30

你知道吗项目状态是嵌入文档(即:嵌套结构),您使用字符串查询该字段,但它需要一个嵌入文档实例。取决于你想要达到的目标(或者项目状态或者项目状态完成),您可以执行以下操作:

# Saving an object in db
now = datetime.utcnow()
status = _Status(start=_StatusFields(start_time=now), complete=_StatusFields(start_time=now))
Project(status=status, location='whatever').save()

# Fails because Project.status is not a string so can't be queried using a string
# Project.objects(status__in=['complete'])

# queries Project.status.start_time
Project.objects(status__start__start_time=now)   

# queries Project.status using a _Status object
status_object = _Status(start=_StatusFields(start_time=now), complete=_StatusFields(start_time=now))
Project.objects(status__in=[status_object])

相关问题 更多 >