Ruby 如何删除MongoDB中嵌入的文档记录?

Ruby 如何删除MongoDB中嵌入的文档记录?,ruby,mongodb,Ruby,Mongodb,我有一个文件病人和一个嵌入式文件程序病人。不知何故,我在我的程序表中导入了重复条目,这导致为特定患者创建了重复的程序嵌入文档。 现在我需要删除那些重复的条目,但我无法这样做。 当我对重复的嵌入文档记录使用delete方法时,它抛出错误,说“delete是一个私有方法”。 我做过类似的事情 if type == "procedures" count = 0 user.access_self unique_procedures = Set.new user.procedures.e

我有一个文件病人和一个嵌入式文件程序病人。不知何故,我在我的程序表中导入了重复条目,这导致为特定患者创建了重复的程序嵌入文档。 现在我需要删除那些重复的条目,但我无法这样做。 当我对重复的嵌入文档记录使用delete方法时,它抛出错误,说“delete是一个私有方法”。 我做过类似的事情

if type == "procedures"

  count = 0
  user.access_self
  unique_procedures = Set.new
  user.procedures.each{|each_proc|
    each_proc.access_self
    if !unique_procedures.include?("#{each_proc.access_self.name} #{each_proc.hid_code}")
      unique_procedures.add("#{each_proc.access_self.name} #{each_proc.hid_code}")
    else
      each_proc.delete
      count = count + 1
    end
  }
  if count > 0
    puts "#{user.full_name} has #{count} duplicate procedures."
    puts "#{count} duplicate procedures deleted."
  else
    puts "#{user.full_name} has no procedures."
  end
  return count
end
如何删除嵌入文档的重复条目???

确定以下是一个示例:

require 'rubygems'
require 'mongo'

# make the connection
@conn = Mongo::Connection.new
@db = @conn['test']
@patients = @db['patients']

# clear out the old collection
@patients.drop

# create some fake procedures
tummy_ache = { :technical_name => 'apendectomy' }
nose_job = { :technical_name => 'rhinoplasty' }

# create some fake patients with duplicate procedures
patient1 = {
    :full_name => 'Tyler Brock',
    :procedures => [ tummy_ache, nose_job, nose_job ]
}

patient2 = {
    :full_name => 'Fake Name',
    :procedures => [ tummy_ache, tummy_ache, nose_job ]
}

patients = [patient1, patient2]

# put the patients into the collection
@patients.insert patients

# remove duplicates
@patients.find.each do |patient|
    patient['procedures'] = patient['procedures'].inject([]) do |list, procedure|
        list << procedure unless list.include?(procedure)
        list
    end
    @patients.update({"_id" => patient["_id"]}, patient)
end

# print collection -- now sans duplicates
@patients.find.each do |patient|
    puts patient.inspect
end
需要“rubygems”
需要“mongo”
#接通
@conn=Mongo::Connection.new
@db=@conn['test']
@患者=@db['patients']
#清理旧藏品
@病人.滴
#制造一些假程序
肚子疼痛={:技术名称=>'apendectomy'}
鼻整形术作业={:技术名称=>“鼻整形术”}
#用重复的程序制造一些假病人
患者1={
:全名=>'Tyler Brock',
:程序=>[肚子痛,鼻子痛,鼻子痛]
}
患者2={
:全名=>“假名”,
:程序=>[肚子痛,肚子痛,鼻子痛]
}
患者=[患者1,患者2]
#把病人送到医院
@病人。插入病人
#删除重复项
@病人。找到。每个人都做|病人|
患者['procedures']=患者['procedures']。注射([])do |列表,程序|
列出患者[“\u id”]},患者)
结束
#打印集合--现在无重复项
@病人。找到。每个人都做|病人|
检查病人
结束

您能展示一下您的文档模式或一些示例文档吗?似乎过程应该是一个数组,而不是一个嵌入的文档(你应该使用$add_to_set修饰符,只是想确保你描述的正确。我只想删除重复的嵌入文档记录。可以通过嵌入文档中的两个键组合检查重复。如果删除_在这方面对我没有帮助。嘿,我只是想知道下面的代码是否有帮助。让我知道。