【问题标题】:rails mongodb find and delete duplicaterails mongodb查找和删除重复项
【发布时间】:2015-04-23 16:21:36
【问题描述】:

有没有可以让这个算法更快的方法?

我正在获取此模型(工件)的所有文档,对于每个文档,我想知道是否有重复,如果有,我将其删除。

   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

【问题讨论】:

  • 排序是否重要(即,如果 2 个文档具有相同的值,那么销毁哪个文档是否重要)?
  • @Papouche,你能试试我的解决方案吗?

标签: ruby-on-rails mongodb ruby-on-rails-4 mongoid4


【解决方案1】:

您需要像这样在 Artifacts 集合上调用 uniq 方法:

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

您可以像 Artifact.distinct(:image_original) 一样使用 Criteria#distinct,但这只会返回仅包含该字段的不同值。

【讨论】:

  • 感谢@Sharvy,我修改为包含两个字段@distinct_artifacts = @all_artifacts.uniq {|artifact| artifact.image_original && artifact.image_thumbnail}@distinct_artifacts.count =>55905 而不是64806
猜你喜欢
  • 2022-08-05
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2015-10-11
  • 1970-01-01
  • 2019-08-28
相关资源
最近更新 更多