mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Projection functions act on *documents*, not the diffs that are passed
to changed callbacks. For example, a projection `{'a.b': 1}` applied to
the *document* `{a: undefined}` will result in `{}`, but the *diff*
of `{a: undefined}` on a query with that projection should still result
in a `changed` callback with that diff being invoked.
Refactor various parts of minimongo to always have a projectionFn for
each observed query (perhaps a trivial one).
Pass the projection into _diffQueryChanges so that it can apply the
projection *before* taking the diff, in the two cases in Minimongo which
use _diffQueryChanges instead of direct application. (We could instead
make the query's results and resultsSnapshot be projected, but Minimongo
currently relies on the fact that these data structures alias the
documents stored in the collection.)
Stop applying the projection to the diffs in changed via
wrapCallback. (We could still use wrapCallback to apply the projection
for added/addedBefore calls, but it seems more consistent to use the
same mechanisms for added that we use for changed.
Fixes #3800. Fixes #2254. Fixes #3571.
7.9 KiB
7.9 KiB