docs: function(what, localKey, foreignKey, whereToStore) {
  			var self = this;
  			var doMap = function(s, what, localKey, foreignKey, whereToStore) {
  				var map = {};
  				what.forEach(function(w) {
  					//console.log("mapOn : w :", w)
  					if (w === null)
  						return;
  					var val = w[foreignKey];
  					if (typeof map[val] !== 'undefined') {
  						if (map[val].forEach)
  							map[val].push(w);
  						else
  							map[val] = [map[val], w];
  					} else
  						map[val] = w;
  				});
  				var finaliseNode = function(entry) {
  					if (map[entry.value[localKey]])
  						entry.value[whereToStore || localKey] = map[entry.value[localKey]];
  					if(entry.ancestor)
  						entry.ancestor.value[entry.key] = entry.value;
  				};
  				if(s._deep_array_)
  					s.forEach(finaliseNode);
  				else if(s.forEach)
  					s.forEach(function(entry){
  						if (map[entry[localKey]])
  							entry[whereToStore || localKey] = map[entry[localKey]];
  					});
  				else if(s._deep_query_node_)
  					finaliseNode(s);
  				else if (map[s[localKey]])
  					s[whereToStore || localKey] = map[s[localKey]];
  				return s;
  			};
  			var func = function(s) {
  				if (!s)
  					return s;
  				if (typeof what === 'string') {
  					var parsed = utils.parseRequest(what);
  					//cloned.logValues();
  					//console.log("____________________________ mapon :  query : ","./" + localKey);
  					var foreigns;
  					if(s._deep_array_)
  						foreigns = querier.query(s, "./*/value/" + localKey).join(",");
  					else if(s.forEach)
  						foreigns = querier.query(s, "./*/" + localKey).join(",");
  					else
  						foreigns = querier.query(s, "./" + localKey);
  					//console.log("_____________ foreigns : ", foreigns);
  					var constrain = foreignKey + "=in=(" + foreigns + ")";
  					if (parsed.uri === '!')
  						parsed.uri = "";
  					if (parsed.uri.match(/(\/\?)|^(\?)/gi))
  						parsed.uri += "&" + constrain;
  					else
  						parsed.uri += "?" + constrain;
  					//console.log("mapOn : parsedUri with constrains : ",parsed.uri);
  					if (parsed.store !== null)
  						return protoc.get(parsed)
  							.done(function(results) {
  								results = [].concat(results);
  								return doMap(s, results, localKey, foreignKey, whereToStore);
  							});
  					else
  						return errors.Internal("deep.mapOn need array as 'what' : provided : " + JSON.stringify(what));
  				} else
  					return doMap(s, what, localKey, foreignKey, whereToStore);
  			};
  			func._isDone_ = true;
  			return self._enqueue(func);
  		}