A mongo.Cursor
объект - это не то, что вы можете закодировать и убрать для дальнейшего использования, например, для чего вы собираетесь его использовать.
A mongo.Cursor
- это то, что вы используете для итерации по «живому запросу», потоку документов. Вы не можете использовать его для возврата пакета документов, который вы отправляете своему клиенту, и когда клиент запрашивает больше документов (следующая страница), вы декодируете сохраненный курсор и продолжаете с того места, где остановились. У курсора есть серверный ресурс под капотом, который сохраняется в течение 10 минут (настраивается, см. cursorTimeoutMillis ) или до тех пор, пока вы не закроете курсор неявно. Вы не хотите, чтобы курсор оставался «живым» во время ожидания клиента, если ему нужно больше документов, особенно в приложении с большим трафиком. Ваш MongoDB быстро исчерпает ресурсы. Если курсор закрыт по тайм-ауту, любая попытка чтения с курсора приведет к ошибке «Курсор не найден, идентификатор курсора: #####»
Метод Cursor.Decode()
не предназначен для декодирования курсора из какой-либо закодированной формы. Он предназначен для декодирования следующего документа, обозначенного курсором, в значение Go.
Вот почему нет волшебной функции mongo.NewCursor()
или mongo.ParseCursor()
или mongo.DecodeCursor()
. mongo.Cursor
передается вам путем выполнения запросов, например, с Collection.Find()
:
func (coll *Collection) Find(ctx context.Context, filter interface{},
opts ...findopt.Find) (Cursor, error)