Mongoengine - 嵌入式文档过滤
问题描述:
我正在使用模型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()
答
使用$elemMatch尝试其上面重叠到match
在mongoengine:
Project.objects.filter(participants__match={"status":"accepted",
"invitee.id":request.user})