2017-11-28 14 views
0

내가 가지고있는 다음 문서Mongoengine 쿼리 참조 필드 속성에 따라

Food(Document) 
    title = fields.StringField() 
    type = fields.StringField() 

Recipe(Document) 
    title = fields.StringField() 
    food = fields.ReferenceField(Food) 
내가

내가 같은 일을 할 수 == "nonveg을"그 food.type 조리법의 목록을 좀하고 싶습니다

수행원?

Recipe.objects.where(food__type="nonveg") 

고마워요!

답변

-1

Recipe.objects(food__type="nonveg") 몽고인을 사용하는 경우.

+0

이 기능이 제대로 작동합니까? 나는 원하는 결과를 재현 할 수 없었다. 이것은 간단히'OperationFailure : $ type : nonveg에 대한 알려지지 않은 문자열 별칭'을 던집니다. –

0

참조 필드는 실제 문서의 ID 만 보유하기 때문에 단일 쿼리에서는 불가능합니다. 는 따라서, 당신은 할 두 개의 쿼리, 당신의 type에 해당 Food의 모든 개체를 가져옵니다

  1. 해야합니다. foods = Food.objects(type='nonveg')
  2. 이제 foods 개체 목록을 사용하여 Recipe 컬렉션을 Recipe.objects(food__in=foods)으로 필터링 할 수 있습니다.

    foods = Food.objects(type="nonveg") 
    recipes = Recipe.objects(food__in=foods) 
    
    : 또한, 단계를 .get()

사용하여 포장 Step 1에서 단일 인스턴스를 얻는 경우에도, 그래서 항상 필터 쿼리에 목록을 통과의 in 작업이 목록을 소요 염두에 두어야