code: func (self *DocumentBase) Populate(field ...string) error {
  
  	if self.document == nil || self.collection == nil || self.connection == nil {
  		panic("You have to initialize your document with *Model.New(document IDocumentBase) before using Populate()!")
  	}
  
  	query := &Query{
  		collection: self.collection,
  		connection: self.connection,
  		query:      bson.M{},
  		multiple:   false,
  		populate:   field,
  	}
  
  	return query.runPopulation(reflect.ValueOf(self.document))
  }
docs: /*
  Populate works exactly like func (*Query) Populate. The only difference is that you call this method
  on each model which embeds the DocumentBase type. This means that you can populate single elements or sub-sub-levels.
  
  For example:
  	User := connection.Model("User")
  
  	user := &models.User{}
  
  	err := User.Find().Exec(user)
  
  	if err != nil {
  		fmt.Println(err)
  	}
  
  	for _, user := range users {
  
  		if user.FirstName == "Max" { //maybe NSA needs some information about Max's messages
  
  			err := user.Populate("Messages")
  
  			if err != nil {
  				//some error occured
  				continue
  			}
  
  			if messages, ok := user.Messages.([]*models.Message); ok {
  
  				for _, message := range messages {
  
  					fmt.Println(message.text)
  				}
  			} else {
  				fmt.Println("something went wrong during cast. wrong type?")
  			}
  		}
  	}
  
  
  */