From 8a4b58d987f3cc464e054e32598eabb6974fd341 Mon Sep 17 00:00:00 2001 From: Slava Kim Date: Tue, 5 Nov 2013 16:58:58 -0800 Subject: [PATCH] More on deep/shallow cloning --- packages/mongo-livedata/oplog.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/mongo-livedata/oplog.js b/packages/mongo-livedata/oplog.js index 53cd01ae75..6fcffe9010 100644 --- a/packages/mongo-livedata/oplog.js +++ b/packages/mongo-livedata/oplog.js @@ -48,6 +48,7 @@ MongoConnection.prototype._observeChangesWithOplog = function ( if (published.has(id)) throw Error("tried to add something already published " + id); published.set(id, fields); + // projection will deep copy object callbacks.added && callbacks.added(id, projection(fields)); }; @@ -75,6 +76,7 @@ MongoConnection.prototype._observeChangesWithOplog = function ( if (callbacks.changed) { var changed = LocalCollection._makeChangedFields( newDoc, oldDoc); + // projection will deep copy the changed object changed = projection(changed); if (!_.isEmpty(changed)) callbacks.changed(id, changed); @@ -169,7 +171,8 @@ MongoConnection.prototype._observeChangesWithOplog = function ( // Oh great, we actually know what the document is, so we can apply // this directly. // XXX this assumes no field filtering - var newDoc = _.clone(published.get(id)); + // XXX get rid of this deep clone once we run it though projection + var newDoc = EJSON.clone(published.get(id)); newDoc._id = id; LocalCollection._modify(newDoc, op.o); handleDoc(id, newDoc);