Я использую go lang в качестве серверной части моего приложения и mongoDB в качестве базы данных. Я столкнулся с проблемой, когда я сравниваю имя и проецирую массив выходных данных, и внутри этого мне также нужно спроецировать сертификаты для этого отпуска. Поскольку мне нужно только небольшая информация из структуры сотрудника, которую я хотел реализовать, используя канал и проект.
type (
Employee struct {
Name string
Password string
EmailAddress string
Position string
Gender string
Nationality string
Department string
MaritalStatus string
Approvedby string
JoinDate time.Time
ConfirmationDate time.Time
EndDate time.Time
Leave []*LeaveInfo
}
LeaveInfo struct {
Total float64
Id int
Days float64
From time.Time
To time.Time
Status string
Certificate []*CertificateInfo
}
CertificateInfo struct {
FileName string
FileType string
FileSize int
}
Структура базы данных следующая
{
"_id" : ObjectId("58213e14927a62f3cf04e05b"),
"name" : "string",
"password" : "string",
"emailaddress" : "string",
"position" : "string",
"gender" : "string",
"maritalstatus" : "string",
"approvedby" : "string",
"nationality" : "german",
"department" : "account",
"joindate" : ISODate("2016-09-19T00:00:00.000Z"),
"confirmationdate" : Date(-62135596800000),
"enddate" : Date(-62135596800000),
"Leave" : [
{
"total" : 20.0,
"id" : 0,
"days" : 0.0,
"type" : "",
"from" : ISODate("2016-12-12T00:00:00.000Z"),
"to" : ISODate("2016-12-12T00:00:00.000Z"),
"status" : "",
"certificate" : [
{
"filename" : "malaysia",
"filetype" : ".zip",
"filesize" : 1234
},
{
"filename" : "singapore",
"filetype" : ".zip",
"filesize" : 1234
}
]
},
{
"total" : 19.0,
"id" : 1,
"days" : 1.0,
"from" : ISODate("2016-12-12T00:00:00.000Z"),
"to" : ISODate("2016-12-12T00:00:00.000Z"),
"applieddate" : ISODate("2016-11-08T02:53:38.902Z"),
"status" : "Processing",
"approveddate" : Date(-62135596800000),
"certificate" : [
{
"filename" : "germany",
"filetype" : ".zip",
"filesize" : 1234
},
{
"filename" : "england",
"filetype" : ".zip",
"filesize" : 1234
}
]
},
{
"total" : 18.0,
"id" : 2,
"days" : 1.0,
"mdays" : 0.0,
"type" : "annualleave",
"daytype" : "FullDay",
"from" : ISODate("2016-12-12T00:00:00.000Z"),
"to" : ISODate("2016-12-12T00:00:00.000Z"),
"applieddate" : ISODate("2016-11-08T05:36:21.579Z"),
"status" : "Processing",
"approveddate" : Date(-62135596800000),
"certificate" : [
{
"filename" : "india",
"filetype" : ".zip",
"filesize" : 1234
},
{
"filename" : "france",
"filetype" : ".zip",
"filesize" : 1234
}
]
}
]
}
Мой код в golang выглядит следующим образом
pipe3 := c.Pipe([]bson.M{
{
"$match": bson.M{
"name":name
},
},
{
"$unwind": "$leave",
},
{
"$project": bson.M{
"_id": false,
"name": 1,
"Id": "$leave.id",
"Total": "$leave.total",
"Days": "$leave.days",
"Status": "$leave.status",
},
},
})
Проблема здесь в том, что я не знаю, как получить всю информацию о сертификатах, связанных с этим конкретным отпуском. Обратите внимание, что сертификат представляет собой массив с как минимум двумя индексами в нем...
I need an output similar to this.
"name": "John",
"Id": "1",
"Total": "10.0",
"Days": "2.0",
"Status": "Process",
"Certificate" : [
{
"filename":"certificate1",
"filesize":"size1"
},
{
"filename":"certificate2",
"filesize":"size2"
}
]
"name": "John",
"Id": "2",
"Total": "8.0",
"Days": "2.0",
"Status": "Process",
"Certificate" : [
{
"filename":"certificate1",
"filesize":"size1"
},
{
"filename":"certificate2",
"filesize":"size2"
}
]
Возможно ли это с помощью проекта или есть ли другой способ сделать это. Благодарим за любую помощь. Пожалуйста. Спасибо.