2016-05-10 4 views
2

これは私のモデルの見た目です。クラスAはSlotTimeのEmbeddedDocumentListFieldを持っています。MongoEngineのEmbeddedDocumentListFieldよりも大きい(gte)クエリ

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

どうすればいいですか?ありがとうございました!

+0

「OrderTime」のコードを追加してください。 –

+0

コードを編集しました。 @RahulGupta –

+0

[関連GitHubの問題](https://github.com/MongoEngine/mongoengine/issues/1291) –

答えて

0

MongoEngineは現在、上記で使用した.filter()クエリを使用して受け取ったEmbeddedDocumentsのフィルタリングをさらにサポートしていないと思います。代わりにこれを行うには780

より大きいstart_timeを持つのみSlotTimeオブジェクトのそのオブジェクトのすべてのSlotTimeオブジェクトslot_hoursリターンをアクセスする理由です、あなたは手動でリストの内包表記を使用してオブジェクトをフィルタリングする必要があります。

# 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] 
+0

この回避策は既に完了していますが、クエリで達成できるかどうかはわかりませんでした。 –

+0

現在、MongoEngineでは不可能です。 –

関連する問題