couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nils Breunese <N.Breun...@vpro.nl>
Subject Dealing with sealed docs
Date Wed, 20 Apr 2011 12:11:20 GMT
Hello all,

I recently upgraded to CouchDB 1.0.2 for development and found some of our view map functions
broke. Apparently it's no longer possible to modify data a doc in a view function before emitting.
I found "Documents are now sealed before being passed to map functions." in the changelog
for 1.0.2.

This is an example of a map function which no longer works under 1.0.2:

----
function(doc) {
  if(doc.type === 'schedule') {
    var events = doc.events;
    if (events) {
      events.forEach(function(event) {
        var broadcasters = event.broadcasters;
        if (broadcasters) {
          broadcasters.forEach(function(broadcaster) {
            if(broadcaster === 'VPRO') {
              event.channel = doc.channel;
              event.channelName = doc.channelName;
              emit(event.end, event);
            }
          });
        }
      });
    }
  }
}
----

A colleague suggested using this:

----
events.forEach(function(e) {
  var event = eval(uneval(e));
----

This creates a deep copy before modifying event properties. It works, but it looks ugly to
me. Is this the way to go or is there a cleaner way?

Nils.
------------------------------------------------------------------------
 VPRO   www.vpro.nl
------------------------------------------------------------------------

Mime
View raw message