私はバックエンドでgolangを、データベースとしてmongoDBを使用しています。埋め込み配列の1つからドキュメントを取得しようとすると、その結果として埋め込み配列のインデックスが1つしか取得されません。mgo(golang + MangoDB)の組み込み配列から要素を取得する
私の構造体は、マイgolangコードは、私は休暇の唯一のインデックス0を取得mは
t := time.Date(2016, 10, 1, 0, 0, 0, 0, time.UTC)
var result []*Employee
if e := c.Find(nil).Select(bson.M{"leave": bson.M{
"$elemMatch": bson.M{
"from": bson.M{
"$gte":t,
},
},
},
},
).All(&result); e != nil {
fmt.Println(e)
}
私のデータベース構造はこの中
_id:57d7a6673897593ae84bed49{
Name:"Mark"
EmpId:"E123"
Password:1234
Leave:[
{
"id" : 0,
"days" : 1.5,
"from" : ISODate("2016-12-01T00:00:00Z"),
"to" : ISODate("2016-12-02T12:00:00Z"),
"applieddate" : ISODate("0001-01-01T00:00:00Z"),
"status" : "Approved",
"approveddate" : ISODate("0001-01-01T00:00:00Z"),
},
{
"id" : 1,
"days" : 2.0,
"from" : ISODate("2016-12-11T00:00:00Z"),
"to" : ISODate("2016-12-12T00:00:00Z"),
"applieddate" : ISODate("0001-01-01T00:00:00Z"),
"status" : "Approved",
"approveddate" : ISODate("0001-01-01T00:00:00Z"),
},
]
}
であるこの
ようtype (
Employee struct {
Name string
EmpId string
Password string
Leave []*LeaveInfo
}
LeaveInfo struct {
Id int
Days float64
From time.Time
To time.Time
AppliedDate time.Time
Status string
ApprovedDate time.Time
}
ですあなたが見ることができる配列の両方のインデックスは、私はそれを取得するときt.Butより大きい日付を持っているEX(インデックス0)は.But私は必要なのt.Pleaseヘルプme.thanksよりも大きい日付を持っているすべてのインデックスを盗んことです
{
"Name": "",
"EmpId": "",
"Password": "",
"Leave": [
{
"Id": 0,
"Days": 1.5,
"from" : ISODate("2016-12-01T00:00:00Z"),
"to" : ISODate("2016-12-02T12:00:00Z"),
"applieddate" : ISODate("0001-01-01T00:00:00Z"),
"status" : "Approved",
"approveddate" : ISODate("0001-01-01T00:00:00Z"),
}
]
}
あなたがより良い必要な「残す」をフィルタリングする配列と '$のmatch'を展開するために' $のunwind'を使用したいからそこには – Anzel
ありがとうございます。実装し、希望の結果を得ました。今すぐ答えを投稿してください。ありがとう –