[英]How to delete an embedded document records in MongoDB?
我有一個文件患者和一個嵌入式文件程序在患者。 不知何故,我在我的程序表中導入了重復的條目,這導致為特定患者創建了重復的過程嵌入文檔。 現在我需要刪除那些重復的條目,但我無法這樣做。 當我在重復的嵌入式文檔記錄上使用刪除方法時,它會拋出錯誤,說“刪除是一個私有方法”。 我做過這樣的事情
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.