我有一个标准的mongo数据库连接,该连接使用官方的Go驱动程序(mongo-go-driver)初始化了
此数据库连接的上下文和连接详细信息为:
setContext = context.Background()
mongoURI := fmt.Sprintf("mongodb://%s:%s@%s/?authSource=admin", mongoUser, mongoPwd, mongoAddress)
mongoContext, cancel := context.WithTimeout(setContext, 5*time.Second)
clientOptions := options.Client().ApplyURI(mongoURI).SetMaxPoolSize(50)
defer cancel()
mongoSession, err := mongo.Connect(mongoContext, clientOptions)
根据文档https://godoc.org/golang.org/x/net/context,我知道这是正确的:
Background返回一个非空的Context。它永远不会被取消,没有价值,也没有期限。它通常由主要功能,初始化和测试使用,并作为传入请求的顶级上下文。
现在,在针对该连接运行查询时,应该使用什么上下文?
以下是使用连接的示例:
mongoConnection := myMongoSessionOfficialDriver.Database(db).Collection(collection)
pipeOptions := options.Aggregate().SetMaxTime(time.Second * 10)
mongoCursor, err := mongoConnection.Aggregate(context.TODO(), aggregationPipeline, pipeOptions)
我的问题是:上下文应该是什么游标?!应该是background()我在想是否应该取消它(当我的查询返回数据时)< / p>
在文档中,对于TODO()来说:
TODO返回一个非空的Context。当不清楚要使用哪个上下文或尚不可用时,代码应使用context.TODO(因为尚未扩展周围的函数以接受Context参数)。静态分析工具可以识别TODO,该工具可以确定上下文是否在程序中正确传播。
好吧...那么我应该在什么上下文中使用聚合查询?