Рельсы mongodb найти и удалить дубликаты

Есть ли что я могу сделать этот алгоритм быстрее?

Я выбираю все документы для этой Модели (Артефакт) и для каждого документа, который я хотел бы знать, если есть дубликат, и если так, я удаляю его.

   Artifact.all.to_a.each do |n|
      image = n.image_original
      thumb = n.image_thumbnail
      count_value =  Artifact.where(:image_original => image, 
                         :image_thumbnail => thumb).all.to_a.count
      if count_value > 1
        n.destroy!
      end
    end

1 ответ

Решение

Вам нужно позвонить uniq метод на коллекцию артефактов, как это:

@all_artifacts = Artifact.all
@distinct_artifacts = @all_artifacts.uniq {|artifact| artifact.image_original}

Ты можешь использовать Criteria#distinct как это Artifact.distinct(:image_original), но это будет только возвращать различные значения только с этим полем.

Другие вопросы по тегам