couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From J Chris Anderson <jch...@gmail.com>
Subject Re: Adding a member into a JSON object in map function
Date Tue, 13 Apr 2010 16:43:14 GMT

On Apr 12, 2010, at 10:42 PM, Cesar Delgado wrote:

> I'm playing around with CouchDB and am kinda curious if I can add a new member to an
object in the map (and/or reduce I guess as well) part.  
> 
> Ok, so an example is I have an object with a name and a plain-text password:
> {"name":"cesar", "passwd":"insecure"}
> 
> What I would like to do is run a map function on this that computes the md5 and then
inserts it into the object. I know it's horrible practice and I know it's wrong and I know
this is bad.  It's an example so please don't flame.  
> 

I think you are saying you'd like to mutate the document itself from the map function. You
don't really want to do this. You can do something like this.

function(doc) {
 var hash = md5(doc.password);
  doc.hash = hash;
delete doc.password;
emit(doc._id, doc)
}

this will give you a value that is the whole doc but with the hash instead of the cleartext.


If you are trying to keep cleartext out of your database, you can also use an _update function,
which can intercept updates before writing the doc to the database. See:

http://svn.apache.org/repos/asf/couchdb/trunk/share/www/script/test/update_documents.js

for examples.

Chris

> Right now all I've been able to do is return the value as a value and the doc._id as
the key.  
> 
> function(doc) {
> var hash = md5(doc.passwd) ;
> emit (doc._id,hash) ;
> 
> }
> 
> I'd love to just have a new JSON oabject as the value and no key.
> 
> function(doc) {
> var hash = md5(doc.passwd) ;
>  doc.insertmefunct("hash",hash) ;
>  emit(null,doc) ;
> }
> 
> would produce: 
> 
> {"name":"cesar", "passwd":"insecure","hash":"f166786326d565962e8523266c0e1d57"}
> 
> Thanks for the help,
> 
> -Cesar
> 
> 


Mime
View raw message