Самый простой бы позволить MongoDB сортировать записи:
var results []YourType
err := sess.DB("").C("collname").Find(bson.M{"someid": "someidval"}).
Sort("-timefield").All(&results)
Если по каким-то причинам вы не можете или не хотите, чтобы это сделать, вы можете использовать sort
пакет. Вам необходимо реализовать sort.Interface
.
Например:
type YourType struct {
SomeId string
Timestamp time.Time
}
type ByTimestamp []YourType
func (a ByTimestamp) Len() int { return len(a) }
func (a ByTimestamp) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByTimestamp) Less(i, j int) bool {
return a[i].Timestamp.After(a[j].Timestamp)
}
Этот ByTimestamp
тип представляет собой кусочек YourType
, и это определяет обратный порядок временных меток, так как метод Less()
использует Time.After()
решить, если элемент и индекс i
меньше, чем элемент с индексом j
,
И использовать его (попробуйте на Go Playground):
var results []YourType
// Run your MongoDB query here
// Now sort it by Timestamp decreasing:
sort.Sort(ByTimestamp(results))
Альтернативная реализация для Less()
будет использовать Time.Before()
, но сравнивать элемент с индексом j
индексировать i
:
func (a ByTimestamp) Less(i, j int) bool {
return a[j].Timestamp.Before(a[i].Timestamp)
}
Попробуйте этот вариант на Go Playground.
Вы получаете результаты от MongoDB? – notionquest
@notionquest, Да. –