code: private void mergeAllFieldValues(DBObject srcDBObj, DBObject tgtDBObj) {
          for (String fieldName : srcDBObj.getUpdatedFieldNames()) {
              FieldDefinition fieldDef = m_tableDef.getFieldDef(fieldName);
              if (fieldDef != null && (fieldDef.isCollection() || fieldDef.isLinkField())) {
                  Set<String> newValueSet =
                      ScalarFieldUpdater.mergeMVFieldValues(tgtDBObj.getFieldValues(fieldName),
                                                            srcDBObj.getRemoveValues(fieldName),
                                                            srcDBObj.getFieldValues(fieldName));
                  tgtDBObj.clearValues(fieldName);
                  tgtDBObj.addFieldValues(fieldName, newValueSet);
              } else {
                  tgtDBObj.clearValues(fieldName);
                  tgtDBObj.addFieldValue(fieldName, srcDBObj.getFieldValue(fieldName));
              }
          }
      }
docs: fields are replaced. MV fields acquire the results of add/remove processing.