如何查询 Djongo ArrayField 中的嵌入记录?

How can I query embedded records in a Djongo ArrayField?

我正在使用 Django 3.0.6 和 Django Rest Framework 3.11.1。我正在使用 djongo 连接器连接到 MongoDB 数据库。我的一个模型有一个包含嵌入式记录的 ArrayField。我想知道如何使用 Django 查询检索这些嵌入式字段。

每个人可以有很多不同的子记录。这是一个示例模型来说明我正在做什么

型号:

from djongo import models

class SubRecords(models.Model):
    status = models.CharField(max_length=20)
    startTime = models.CharField(max_length=20)
    identifier = models.CharField(max_length=20)
    job_title = models.CharField(max_length=20)

    class Meta:
        abstract = True

class Person(models.Model):
    _id = ObjectIdField()
    workplace = models.CharField(max_length=120)
    subject = models.CharField(max_length=120)
    records = models.ArrayField(model_container=SubRecords)

我想查询Person模型得到

  1. 所有 Person.records 个对象和
  2. Person.records 个符合某些条件的对象

我试过这样做

>>> Person.objects.filter(records__exact={'job_title': 'HR'})

现在我面临的问题是,结果不限于职位为 HR 的子记录,相反,如果 Person 对象包含符合条件的子记录,则整个 Person返回对象和关联的子记录。 我希望能够获得所有子记录的列表,并且只有符合我指定条件的子记录。我该怎么做?

我想你可以这样做

Person.objects.filter(records__in={'job_title':'HR'})

如果需要,您可以在查询的末尾添加 .all()

你不需要__exact:

Person.objects.filter(records={'job_title':'HR'})