func (p *Pipe) Iter() *Iter {
	// Clone session and set it to Monotonic mode so that the server
	// used for the query may be safely obtained afterwards, if
	// necessary for iteration when a cursor is received.
	cloned := p.session.Clone()
	cloned.SetMode(Monotonic, false)
	defer cloned.Close()
	c := p.collection.With(cloned)

	var result struct {
		// 2.4, no cursors.
		Result []bson.Raw

		// 2.6+, with cursors.
		Cursor struct {
			FirstBatch []bson.Raw "firstBatch"
			Id         int64
		}
	}

	cmd := pipeCmd{
		Aggregate: c.Name,
		Pipeline:  p.pipeline,
		AllowDisk: p.allowDisk,
		Cursor:    &pipeCmdCursor{p.batchSize},
	}
	err := c.Database.Run(cmd, &result)
	if e, ok := err.(*QueryError); ok && e.Message == `unrecognized field "cursor` {
		cmd.Cursor = nil
		cmd.AllowDisk = false
		err = c.Database.Run(cmd, &result)
	}
	firstBatch := result.Result
	if firstBatch == nil {
		firstBatch = result.Cursor.FirstBatch
	}
	return c.NewIter(p.session, firstBatch, result.Cursor.Id, err)
}
func (p *Pipe) Iter() *Iter {
	
	
	
	cloned := p.session.Clone()
	cloned.SetMode(Monotonic, false)
	defer cloned.Close()
	c := p.collection.With(cloned)

	var result struct {
		
		Result []bson.Raw

		
		Cursor struct {
			FirstBatch []bson.Raw "firstBatch"
			Id         int64
		}
	}

	cmd := pipeCmd{
		Aggregate: c.Name,
		Pipeline:  p.pipeline,
		AllowDisk: p.allowDisk,
		Cursor:    &pipeCmdCursor{p.batchSize},
	}
	err := c.Database.Run(cmd, &result)
	if e, ok := err.(*QueryError); ok && e.Message == `unrecognized field "cursor` {
		cmd.Cursor = nil
		cmd.AllowDisk = false
		err = c.Database.Run(cmd, &result)
	}
	firstBatch := result.Result
	if firstBatch == nil {
		firstBatch = result.Cursor.FirstBatch
	}
	return c.NewIter(p.session, firstBatch, result.Cursor.Id, err)
}
func ( p * Pipe ) Iter ( ) * Iter { // Clone session and set it to Monotonic mode so that the server // used for the query may be safely obtained afterwards, if // necessary for iteration when a cursor is received. cloned := p . session . Clone ( ) cloned . SetMode ( Monotonic , false ) defer cloned . Close ( ) c := p . collection . With ( cloned ) var result struct { // 2.4, no cursors. Result [ ] bson . Raw // 2.6+, with cursors. Cursor struct { FirstBatch [ ] bson . Raw " " Id int64 } } cmd := pipeCmd { Aggregate : c . Name , Pipeline : p . pipeline , AllowDisk : p . allowDisk , Cursor : & pipeCmdCursor { p . batchSize } , } err := c . Database . Run ( cmd , & result ) if e , ok := err . ( * QueryError ) ; ok && e . Message == `unrecognized field "cursor` { cmd . Cursor = nil cmd . AllowDisk = false err = c . Database . Run ( cmd , & result ) } firstBatch := result . Result if firstBatch == nil { firstBatch = result . Cursor . FirstBatch } return c . NewIter ( p . session , firstBatch , result . Cursor . Id , err ) }
// Iter executes the pipeline and returns an iterator capable of going
// over all the generated results.
Iter executes the pipeline and returns an iterator capable of going over all the generated results .