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