这就是我的模型的样子。类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]

08-26 15:47