docs: function (id, values, signs) {
              var self = this;
  
              var transformedValues = _
              .transform(values, function(result, array, key) {
                  var withSign = {};
                  if (signs && signs.length !== 0){
                      withSign = _.transform(array, function(result, item){
                          if (typeof item !== "object"){
                              return true;
                          }
                          _.forEach(signs, function(sign){
                              if (_.some([item], sign)){
                                  var obj = {};
                                  obj[key] = {$each: [item]};
                                  obj.sign = sign;
                                  obj.field = key;
                                  (result.vaulesWithSign || (result.vaulesWithSign = []))
                                  .push(obj);
                                  (result.objsWithSign || (result.objsWithSign = []))
                                  .push(item);
                              }
                          });
                      }, {});
                  }
  
                  result.vaulesWithSign = 
                  (result.vaulesWithSign || (result.vaulesWithSign = []))
                  .concat(withSign.vaulesWithSign || []);
  
                  (result.vaulesWithoutSign || (result.vaulesWithoutSign = {}))[key] = 
                      {$each: _.difference(array, withSign.objsWithSign)};
              }, {});
  
              if (transformedValues.vaulesWithSign){
                      transformedValues = transformedValues.vaulesWithSign
                          .concat(transformedValues.vaulesWithoutSign);
              }
  
              return Promise.map(transformedValues, function(transformedValue){
                  var query = { _id: waterline.nodes.mongo.objectId(id) };
                  var update = {
                      $addToSet: transformedValue
                  };
                  var options = {new: true};
                  if(transformedValue.sign){
                      query[transformedValue.field] = {$not: {$elemMatch: transformedValue.sign}};
                      transformedValue = _.pick(transformedValue, transformedValue.field);
                      update = {
                          $addToSet: transformedValue
                      };
                      return self.findAndModifyMongo(query, {}, update, options);
                  }
                  return self.updateAndFindMongo(query, update, options);
              }).then(function(modifiedDocs){
                  return _.last(modifiedDocs);
              });
          }