我正在使用架构rtoreqs:-
{
"status": 0,
"isSafe": true,
"isDeleted": false,
"_id": "5ee9c426e9f4d429a47b3d5f",
"name": "TESTVisitor1",
"mobile": "123456780",
"email": "[email protected]",
"empId": "028207",
"visitingDate": "2020-06-16T00:00:00.000Z",
"visitingTime": "05:00AM",
"currentLocation": "ADDR1",
"created": "2020-06-17T07:20:06.933Z",
"updated": "2020-06-17T07:20:06.933Z",
"__v": 0,
"id": "5ee9c426e9f4d429a47b3d5f"
}
并且具有模式questionsAnswered,其中的字段reqId包含rtoreqsId的ID:-
{
"_id": "5ee9c427e9f4d429a47b3d60",
"isDeleted": false,
"reqId": "5ee9c426e9f4d429a47b3d5f",
"questions": [
{
"comment": "",
"questionId": "5ee873e50a1863139cd8d446",
"optionSelected": 1
},
{
"comment": "",
"questionId": "5ee87af0b6241f2a08a88f5a",
"optionSelected": 2
}
],
"created": "2020-06-17T07:20:07.143Z",
"updated": "2020-06-17T07:20:07.143Z",
"__v": 0
}
并且有一个问题模式,其中上面的模式具有如下每个问题ID到问题模式ID的映射
[
{
"_id": "5ee873e50a1863139cd8d446",
"name": "Sample Question",
"options": [
{
"id": 2,
"title": "No"
},
{
"id": 1,
"title": "Yes"
}
]
},
{
"_id": "5ee87af0b6241f2a08a88f5a",
"name": "Sample Question2",
"options": [
{
"id": 2,
"title": "No"
},
{
"id": 1,
"title": "Yes"
}
]
}
]
和iver在组合rtoreq和问题时执行了聚合,并通过以下查询回答:-
rtoreqs.aggregate(
[
{
'$lookup': {
'from': 'questionsanwereds',
'localField': '_id',
'foreignField': 'reqId',
'as': 'questionsAnswereds'
}
}, {
'$unwind': {
'path': '$questionsAnswereds'
}
}, {
'$project': {
'questionsAnswereds._id': 0,
'questionsAnswereds.isDeleted': 0,
'questionsAnswereds.reqId': 0,
'questionsAnswereds.created': 0,
'questionsAnswereds.updated': 0
}
}
]
)
其结果是:-
{
"_id":"5ee9c426e9f4d429a47b3d5f",
"status":0,
"isSafe":true,
"isDeleted":false,
"name":"TESTVisitor1",
"mobile":"123456780",
"email":"[email protected]",
"empId":"028207",
"visitingDate":"2020-06-16T00:00:00.000+00:00",
"visitingTime":"05:00AM",
"currentLocation":"ADDR1",
"created":2020-06-17T07:20:06.933+00:00,
"updated":2020-06-17T07:20:06.933+00:00,
"questionsAnswereds":{
"questions":[
{
"comment":"",
"questionId":"5ee873e50a1863139cd8d446",
"optionSelected":1
},
{
"comment":"",
"questionId":"5ee87af0b6241f2a08a88f5a",
"optionSelected":2
}
]
}
}
现在我想用相应的questionId中存在的名称替换questionId。但是我无法做到这一点
您可以通过多种方式执行此操作,以下是嵌套$lookup
的示例:
[
{
'$lookup': {
'from': 'questionsanwereds',
'let': {id: '$_id'},
"pipeline": [
{
$match: {
$expr: {
$eq: ["$$id", "$reqId"]
}
}
},
{
$unwind: "$questions"
},
{
$lookup: {
from: "questions",
localField: "$questionId",
foreignField: "_id",
as: "questionObj"
}
},
{
"$unwind": "$questionObj"
},
{
$group: {
_id: "$_id",
questions: {
$push: {
comment: "$comment",
name: "$questionObj.name",
optionSelected: "$optionSelected"
}
}
}
}
],
'as': 'questionsAnswereds'
}
},
{
'$unwind': {
'path': '$questionsAnswereds'
}
}
]
该策略是分别填充每个问题的名称,然后分组以恢复所需的结构。