私のアプリケーションのバックエンドとしてgo langを使用し、mongoDBをdatabase.Iとして使用して、名前とプロジェクトを比較する問題に直面しています。そのleave.Sinceのための証明書をプロジェクト私は従業員の構造体から私はパイプとプロジェクトを使用して実装したい少しの情報が必要なので。は、mgoを使用してネストされた配列を投影する必要があります
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",
},
},
})
を次のようになり、ここでの問題は、私は、証明書のすべての情報を取得する方法を知りませんでその特定の休暇に関連しています。証明書は少なくとも2つのインデックスを持つ配列です...
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"
}
]
はこの可能使用project.orです上記文書の構造例に使用this.Appreciate任意のhelp.Please.Thanks
「証明書」を$プロジェクトステージに追加します。 –