s := globalS.Copy() c := s.DB(db).C(collection) defer s.Close() return c.Find(query).Select(selector).Sort(sort).Skip(100).Limit(20).All(result)
这中状况只适用于数据量比较小的时候,当数据量达到必定量,sort会内存益处报错多线程
s := globalS.Copy() c := s.DB(db).C(collection) defer s.Close() return c.Find(query).Select(selector).Skip(100).Limit(20).All(result)
当数据量比较大的时候,能够使用这种状况。若是须要排序,那就取得返回值后在排序。线程
var result []interface{} s := globalS.Copy() c := s.DB(db).C(collection) defer s.Close() pipeM := []bson.M{ {"$match": bson.M{"status": "true"}}, {"$skip": start}, {"$limit": end}, {"$sort": bson.M{"height": -1}}, } pipe := c.Pipe(pipeM) err = pipe.All(&result)
当数据量比较大的时候,而且须要排序的时候,能够使用这种状况。由于在skip,limit和sort同时出现的时候,因为有优先级,须要不管顺序如何,都是先执行sort,在执行skip,最后执行limit,可是咱们使用聚合,也就是mgo里面的pipeline,能够改变执行的前后顺序。code