2013-11-04 70 views
5

我正在使用模型Participants as embedded documents。以下是存储它的结构。Mongoengine - 嵌入式文档过滤

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

我想要检索与公认的参与请求项目的列表(即participants.status =“接受”)。

我正在尝试使用以下代码。但它会返回所有项目。

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

回答

7

使用$elemMatch尝试其上面重叠到match在mongoengine:

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