ฉันเข้าใจว่าเมื่อคุณทำลายเอกสารหลักใน Mongo คุณจะทำลายลูก ๆ ของเอกสารนั้นด้วย และมันจะลดระดับลงจนกว่าเอกสารอ้างอิงทั้งหมดจะถูกลบออก
ฉันมีโครงสร้างการรวบรวมดังต่อไปนี้
class A
include Mongoid::Document
field :name, :type => String
has_many :bs
end
class B
include Mongoid::Document
field :name, :type => String
has_many :cs
end
class C
include Mongoid::Document
field :name, :type => String
end
ฉันเจอสถานการณ์ในโค้ดของฉันซึ่งฉันต้องลบ Class A หนึ่งรายการและเอกสารที่เกี่ยวข้องทั้งหมด เนื่องจากแต่ละโมเดลเหล่านี้ใช้ Mongoid ฉันจึงใช้วิธี destroy_all เช่นนั้น
a = A.where({'_id' => "123456789"})
a.bs.destroy_all
=> 'however many a's I had'
จากการอ่านเอกสาร ฉันคิดว่าเอกสารอ้างอิงแต่ละฉบับจะถูกลบออกเช่นกัน
น่าเสียดายที่สิ่งที่เกิดขึ้นคือคลาส b ของฉันหายไปหมดแล้ว และฉันมีคลาส c กำพร้าจำนวนหนึ่งในฐานข้อมูลของฉัน
So:
A) สมมติว่า destroy_all ไม่ได้ทำอย่างที่ฉันคิด มีอะไรที่สามารถใช้เพื่อลบพาเรนต์และเอกสารอ้างอิงทั้งหมดใน mongoid หรือไม่?
B) แม้ว่าฉันจะดำเนินการนี้บนเครื่องท้องถิ่น แต่ฉันก็ยังอยากทราบว่า มีวิธีใดบ้างที่จะลบเอกสารที่ไม่เกี่ยวข้องออกจากคอลเลกชันที่เปลี่ยนแปลง