couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Bartak <john.bar...@autodesk.com>
Subject Reduce function error "keys has no properties"
Date Sat, 08 Nov 2008 01:05:03 GMT
I get the error "Query Server Log Message: function raised exception (TypeError: keys has no
properties)" when I run my reduce function and try to use the keys parameter.  I thought keys
was supposed to have the documentId's for each document passed in through the values parameter?

 My View looks like:

function(doc)
{
   function emitParts(parts,doc)
   {
           for (var i = 0; i < parts.length; ++i)
           {
                     emit(parts[i].substr(0,3).toLowerCase(),doc);
           }
   }

   if (doc.type == "Person")
   {
                  var parts;
                  if (doc.Name && typeof(doc.Name) == "string")
                  {
                                parts = doc.Name.split(new RegExp("[ ]"));
                                emitParts(parts,doc);
                  }
                  if (doc.Email && typeof(doc.Email) == "string")
                  {
                                parts = doc.Email.split(new RegExp("[.@ ]"));
                                emitParts(parts,doc);
                  }

   }
 }
 function( keys, values )
 {
               var usedKeys = '';
                var reduced = [];
                for ( var i = 0; i < keys.length; ++i )
                {
                                if (usedKeys.indexOf('%!' + keys[i] + '%!') == -1)
                                {
                                                usedKeys = usedKeys + '%!' + keys[i] + '%!';
                                                reduced.push(values[i]);
                                }
                }
                return reduced;
}

If I remove any reference to keys from the reduce function, the error goes away.

This View creates keys where that are the first 3 characters found in every word of the Person's
eMail and Name fields.

The intent of the usedKeys code in the reduce function is deal with the case where a document
has an Email field and a Name field that have words that start with the same 3 characters.
 It prevents the same document from being inserted in the results twice.



Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message