Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 结构/结果的逆时间顺序_Mongodb_Sorting_Go_Time_Mgo - Fatal编程技术网

Mongodb 结构/结果的逆时间顺序

Mongodb 结构/结果的逆时间顺序,mongodb,sorting,go,time,mgo,Mongodb,Sorting,Go,Time,Mgo,刚开始学咕噜 想知道如何在Go中按相反顺序对结构元素进行排序。比方说,我从数据库中得到的结果如下: var results []<someClass> collection.C(results).Find(bson.M{"<someid>":<id_val>}).All(&results) var结果[] collection.C(results.Find(bson.M{“”:}).All(&results) 现在,我的数据库对象/结果在slice

刚开始学咕噜

想知道如何在Go中按相反顺序对结构元素进行排序。比方说,我从数据库中得到的结果如下:

var results []<someClass>
collection.C(results).Find(bson.M{"<someid>":<id_val>}).All(&results)
var结果[]
collection.C(results.Find(bson.M{“”:}).All(&results)

现在,我的数据库对象/结果在slice
results
中可用。如何在名为time的列上按相反顺序对切片
结果进行排序?

最简单的方法是让MongoDB对记录进行排序:

var results []YourType
err := sess.DB("").C("collname").Find(bson.M{"someid": "someidval"}).
    Sort("-timefield").All(&results)
如果出于某种原因您不能或不想这样做,您可以使用该软件包。你需要实施

例如:

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()
方法用于确定元素和索引
i
是否小于索引
j
处的元素

并使用它(在桌面上试用):

Less()
的另一种实现是使用,但将索引
j
处的元素与索引
i
进行比较:

func (a ByTimestamp) Less(i, j int) bool {
    return a[j].Timestamp.Before(a[i].Timestamp)
}

在上尝试此变体。

是否从MongoDB获得结果?@conceptQuest,Yes.Yes。谢谢你的回答。我也理解你的意图。
func (a ByTimestamp) Less(i, j int) bool {
    return a[j].Timestamp.Before(a[i].Timestamp)
}