В серверной части я использую go lang, а для базы данных я использую mongoDB. Я пытаюсь найти последний документ, вставленный во встроенный массив, чтобы я мог получить документ в последнем индексе массива, не зная его индекса. Прямо сейчас я получаю все документы сотрудника, а затем нахожу последний индекс. Это похоже на перегрузку моя оперативная память, так как мне нужно получить 1000 записей о сотруднике и сохранить их в оперативной памяти, прежде чем найти последний индекс массива. Моя структура выглядит следующим образом
type (
Employee struct {
Name string
Password string
EmpId 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
}
Вот как я делаю в своем приложении
My code is follows
employee := Employee{}
err = c.Find(bson.M{
"empid": "1234"
}).One(&result)
if err != nil {
log.Fatal(err)
}
name:=result.Name
lastindex:= result.LeaveInfo[len(result.LeaveInfo)-1].Id
Как вы можете видеть, я извлекаю все данные о сотрудниках, а затем нахожу идентификатор последнего документа. Есть ли лучший способ сделать это. Благодарю за любую помощь. Пожалуйста... Спасибо..
Недавно добавленные коды
This code is based on your example
var result bson.M
query := bson.M{"empid": "1234"} // gets the employee you are interested in
match := bson.M{"$match": query} // Set up the match part of the pipeline
unwind := bson.M{"$unwind": "$leave"} // sets up the leave field to be unwound
pipeline := []bson.M{match, unwind,{
"$project":bson.M{
"ID":bson.M{
"$slice": []interface{}{"$leave.id", -1},
}
}
iter := postCollection.Pipe(pipeline).Iter()
for iter.Next(&result) {
fmt.Printf("%+v\n", result)
}
iter.Close()
Этот код дает мне много таких же документов, как 542 документа. Но все эти документы одинаковы...