Godeps/_workspace/src/gopkg.in/mgo.v2/session.go
func (c *Collection) NewIter(session *Session, firstBatch []bson.Raw, cursorId int64, err error) *Iter {
	var server *mongoServer
	csession := c.Database.Session
	csession.m.RLock()
	socket := csession.masterSocket
	if socket == nil {
		socket = csession.slaveSocket
	}
	if socket != nil {
		server = socket.Server()
	}
	csession.m.RUnlock()

	if server == nil {
		if csession.Mode() == Eventual {
			panic("Collection.NewIter called in Eventual mode")
		}
		if err == nil {
			err = errors.New("server not available")
		}
	}

	if session == nil {
		session = csession
	}

	iter := &Iter{
		session: session,
		server:  server,
		timeout: -1,
		err:     err,
	}
	iter.gotReply.L = &iter.m
	for _, doc := range firstBatch {
		iter.docData.Push(doc.Data)
	}
	if cursorId != 0 {
		iter.op.cursorId = cursorId
		iter.op.collection = c.FullName
		iter.op.replyFunc = iter.replyFunc()
	}
	return iter
}
func (c *Collection) NewIter(session *Session, firstBatch []bson.Raw, cursorId int64, err error) *Iter {
	var server *mongoServer
	csession := c.Database.Session
	csession.m.RLock()
	socket := csession.masterSocket
	if socket == nil {
		socket = csession.slaveSocket
	}
	if socket != nil {
		server = socket.Server()
	}
	csession.m.RUnlock()

	if server == nil {
		if csession.Mode() == Eventual {
			panic("Collection.NewIter called in Eventual mode")
		}
		if err == nil {
			err = errors.New("server not available")
		}
	}

	if session == nil {
		session = csession
	}

	iter := &Iter{
		session: session,
		server:  server,
		timeout: -1,
		err:     err,
	}
	iter.gotReply.L = &iter.m
	for _, doc := range firstBatch {
		iter.docData.Push(doc.Data)
	}
	if cursorId != 0 {
		iter.op.cursorId = cursorId
		iter.op.collection = c.FullName
		iter.op.replyFunc = iter.replyFunc()
	}
	return iter
}
func ( c * Collection ) NewIter ( session * Session , firstBatch [ ] bson . Raw , cursorId int64 , err error ) * Iter { var server * mongoServer csession := c . Database . Session csession . m . RLock ( ) socket := csession . masterSocket if socket == nil { socket = csession . slaveSocket } if socket != nil { server = socket . Server ( ) } csession . m . RUnlock ( ) if server == nil { if csession . Mode ( ) == Eventual { panic ( " " ) } if err == nil { err = errors . New ( " " ) } } if session == nil { session = csession } iter := & Iter { session : session , server : server , timeout : - 1 , err : err , } iter . gotReply . L = & iter . m for _ , doc := range firstBatch { iter . docData . Push ( doc . Data ) } if cursorId != 0 { iter . op . cursorId = cursorId iter . op . collection = c . FullName iter . op . replyFunc = iter . replyFunc ( ) } return iter }
// NewIter returns a newly created iterator with the provided parameters.
// Using this method is not recommended unless the desired functionality
// is not yet exposed via a more convenient interface (Find, Pipe, etc).
//
// The optional session parameter associates the lifetime of the returned
// iterator to an arbitrary session. If nil, the iterator will be bound to
// c's session.
//
// Documents in firstBatch will be individually provided by the returned
// iterator before documents from cursorId are made available. If cursorId
// is zero, only the documents in firstBatch are provided.
//
// If err is not nil, the iterator's Err method will report it after
// exhausting documents in firstBatch.
//
// NewIter must be called right after the cursor id is obtained, and must not
// be called on a collection in Eventual mode, because the cursor id is
// associated with the specific server that returned it. The provided session
// parameter may be in any mode or state, though.
//
NewIter returns a newly created iterator with the provided parameters . Using this method is not recommended unless the desired functionality is not yet exposed via a more convenient interface ( Find Pipe etc ) . The optional session parameter associates the lifetime of the returned iterator to an arbitrary session . If nil the iterator will be bound to c s session . Documents in firstBatch will be individually provided by the returned iterator before documents from cursorId are made available . If cursorId is zero only the documents in firstBatch are provided . If err is not nil the iterator s Err method will report it after exhausting documents in firstBatch . NewIter must be called right after the cursor id is obtained and must not be called on a collection in Eventual mode because the cursor id is associated with the specific server that returned it . The provided session parameter may be in any mode or state though .