这就是我的模型的样子。类A具有一个SlotTime的EmbeddedDocumentListField。
class SlotTime(EmbeddedDocument):
# this is having minutes like 780 for 1pm.
start_time = IntField(required=True)
end_time = IntField(required=True)
class A(Document):
name = StringField(primary_key=True)
slot_hours = EmbeddedDocumentListField(SlotTime)
SlotTime具有带有开始和结束时间值的对象列表。
[<SlotTime: SlotTime object>,<SlotTime: SlotTime object>]
现在我想进行查询,以将start_time大于给定值的结果返回给我。
想要与此查询类似的东西:
A.objects.get(name__exact='xyz').slot_hours.filter(start_time__gte=780)
尝试了这个,但这返回了所有值。
A.objects.filter(name__exact='xyz',slot_hours__start_time__gte=780)[0].slot_hours
有人可以帮我吗?谢谢!
最佳答案
我认为MongoEngine当前不支持使用您在上面使用的EmbeddedDocuments
查询进一步过滤掉接收到的.filter()
。这就是为什么访问slot_hours
返回该对象的所有SlotTime
对象,而不是仅返回SlotTime
大于780的那些start_time
对象的原因。
为此,您将必须使用列表推导手动过滤掉对象。
# perform filtering and get the first 'A' object
obj = A.objects.filter(name__exact='xyz',slot_hours__start_time__gte=780)[0]
# get the relavent 'SlotTime' objects
slot_time_objs = [x for x in obj.slot_hours if x.start_time >= 780]