У меня есть стандартное соединение БД 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 Я понимаю, что это правильно:
Фон возвращает ненулевой пустой контекст.Он никогда не отменяется, не имеет значений и не имеет крайнего срока.Обычно он используется главной функцией, инициализацией и тестами, а также в качестве контекста верхнего уровня для входящих запросов.
Теперь, когда я выполняю запросы к этому соединению, какой контекст мне следует использовать?
Вот пример использования соединения:
mongoConnection := myMongoSessionOfficialDriver.Database(db).Collection(collection)
pipeOptions := options.Aggregate().SetMaxTime(time.Second * 10)
mongoCursor, err := mongoConnection.Aggregate(context.TODO(), aggregationPipeline, pipeOptions)
Мой вопрос такой: каким должен быть контекст для курсора?! Должен ли он быть фоновым () Я не думаю, что его следует отменить (когда мой запрос возвращает данные)
В документации для TODO () написано:
TODO возвращает неноль, пустой контекст.Код должен использовать context.TODO, когда неясно, какой контекст использовать, или он еще не доступен (потому что окружающая функция еще не была расширена для принятия параметра Context).TODO распознается инструментами статического анализа, которые определяют, правильно ли распространяются контексты в программе.
Хорошо ... хорошо, какой контекст мне следует использовать для составных запросов?