2013-11-04 3 views
5

Ich arbeite an Project Modell mit Participants as embedded documents. Es folgt die Struktur, in der es gespeichert ist.Mongoengine - Eingebettete Dokumentenfilterung

{ "_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" } 

Ich möchte eine Liste von Projekten mit akzeptierten Partizipierungsanforderungssignals (das heißt participants.status = „akzeptiert“) abzurufen.

Ich versuche mit folgendem Code. Aber es gibt alle Projekte zurück.

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

Antwort

7

Try $elemMatch verwendet, die zu match in mongoengine aliased ist:

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