Однако код по указанной мною ссылке я бы переписал... Метод, выполняющий сравнение, должен (имхо) принимать логический параметр, указывающий на то, как выполнять проверку свойств, содержащих в качестве значения ObjectId: нужно ли сравнивать только значения таких идентификаторов, или же необходимо получать объекты, на которые указывают идентификаторы и рекурсивно сравнивать их. При этом следует вести контроль того, какие идентификаторы уже проверялись, дабы избежать попадания в бесконечный цикл, т.к. объекты могут иметь взаимные ссылки др. на др.