code: func (c *Client) ReadingsByDeviceAndValueDescriptor(deviceId, valueDescriptor string, limit int) (readings []contract.Reading, err error) {
  	conn := c.Pool.Get()
  	defer conn.Close()
  
  	if limit == 0 {
  		return readings, nil
  	}
  
  	objects, err := getObjectsByRangeFilter(conn,
  		db.ReadingsCollection+":device:"+deviceId,
  		db.ReadingsCollection+":name:"+valueDescriptor,
  		0, limit-1)
  	if err != nil {
  		return readings, err
  	}
  
  	readings = make([]contract.Reading, len(objects))
  	for i, in := range objects {
  		err = unmarshalObject(in, &readings[i])
  		if err != nil {
  			return readings, err
  		}
  	}
  
  	return readings, nil
  
  }
docs: // Return a list of readings for a device filtered by the value descriptor and limited by the limit
  // The readings are linked to the device through an event