code: function objectsAreEqual(obj1, obj2) {
    // Always search through array on array columns
    if (Array.isArray(obj1)) {
      if (Array.isArray(obj2)) {
        throw new Parse.Error(107, `You cannot use ${obj2} as a query parameter`);
      } else {
        return _.some(obj1, obj => objectsAreEqual(obj, obj2));
      }
    }
  
    // scalar values (including null/undefined)
    // Note: undefined equals null.
    // For all other objects, strict equality is applied
    if (obj1 === obj2 || (_.isNil(obj1) && _.isNil(obj2))) {
      return true;
    }
  
    // if any of those is null or undefined the other is not because
    // of above --> abort
    if (_.isNil(obj1) || _.isNil(obj2)) {
      return false;
    }
  
    // objects
    if (_.isEqual(obj1, obj2)) {
      return true;
    }
  
    // both pointers
    if (obj1.objectId !== undefined && obj1.objectId === obj2.objectId) {
      return true;
    }
  
    // both dates
    if (isDate(obj1) && isDate(obj2)) {
      return deserializeQueryParam(obj1) === deserializeQueryParam(obj2);
    }
  
    return false;
  }
docs: Evaluates whether 2 objects are the same, independent of their representation
  (e.g. Pointer, Object)