Рельсы 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)
, но это будет только возвращать различные значения только с этим полем.