2013-11-04 20 views
5

Participants as embedded documents ile Project modelinde çalışıyorum. Aşağıdaki, depolandığı yapıdır.Mongoengine - Gömülü belge filtreleme

{ "_id" : ObjectId("5277a15c2d6d1302a2a9bf88"), 
    "code_certified" : true, 
    "description" : "This is gonna to be accepted.", 
    "owners" : [ 
    "5277a1472d6d1302a2a9bf86" ], 
    "participants" : [ 
    { "id" : ObjectId("5277a15c2d6d1302a2a9bf87"), 
     "invitee" : { "email" : "[email protected]", 
     "name" : "P", 
     "id" : "5277a1472d6d1302a2a9bf86" }, 
     "inviter" : { "email" : "[email protected]", 
     "name" : "P", 
     "id" : "5277a1472d6d1302a2a9bf86" }, 
     "role" : "owner", 
     "date_invited" : Date(1383523200000), 
     "status" : "accepted" }, 
    { "id" : ObjectId("5277a17f2d6d1302a2a9bf8d"), 
     "invitee" : { "id" : "5277a1282d6d1302a2a9bf85", 
     "name" : "Pravin Mhatre", 
     "email" : "[email protected]" }, 
     "inviter" : { "id" : "5277a1472d6d1302a2a9bf86", 
     "email" : "[email protected]", 
     "name" : "P M" }, 
     "role" : "contributor", 
     "date_invited" : Date(1383523200000), 
     "status" : "pending" } ], 
    "task_sequence" : 1, 
    "title" : "Accept" } 

ben kabul katılım isteği ile Projeler listesini (yani participants.status = "kabul") almak istiyor.

Aşağıdaki kodla deniyorum. Ama tüm projeleri geri döndürüyor.

ApiResponse(Project.objects.filter(participants__invitee__id=str(request.user.id), participants__status__iexact="accepted").all(), ProjectEncoder).respond() 

cevap

7

mongoengine içinde match diğer ad olarak $elemMatch kullanarak deneyin:

Project.objects.filter(participants__match={"status":"accepted", 
              "invitee.id":request.user})