     reactiveKey = "#{reactiveCalcObj.modelName}.#{JSON.stringify reactiveCalcObj.instanceId}.#{reactiveCalcObj.reactiveName}"
 
     modelClass = J.models[reactiveCalcObj.modelName]
-    instance = modelClass.fetchOne reactiveCalcObj.instanceId
+    projection = {}
+    projection[reactiveCalcObj.reactiveName] = true
+    instance = modelClass.fetchOne(
+        reactiveCalcObj.instanceId
+        fields: projection
+    )
 
     # While this is recalculating, J._reactiveCalcsInProgress still contains reactiveKey
     # or else a different fiber could redundantly start the same recalc


                        if oldWatcherDoc?
                            resetCountByModelReactive["#{watcherModelName}.#{watcherReactiveName}"] += 1

                            priority = undefined
                            for dataSessionId, fieldsByModelIdQuery of J._dataSessionFieldsByModelIdQuery

            mutableOldValues = {}
            mutableNewValues = {}
            for fieldName, fieldSpec of modelClass.fieldSpecs
                mutableOldValues[fieldName] = oldDoc[fieldName]
                mutableNewValues[fieldName] = newDoc[fieldName]
            for reactiveName, reactiveSpec of modelClass.reactiveSpecs
                continue if not reactiveSpec.denorm
                mutableOldValues[reactiveName] = oldDoc._reactives?[reactiveName]?.val
                mutableNewValues[reactiveName] = newDoc._reactives?[reactiveName]?.val

