如何查询 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
模型得到
- 所有
Person.records
个对象和
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'})
我正在使用 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
模型得到
- 所有
Person.records
个对象和 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'})