Bu yüzden, Node'da küçük blog benzeri bir proje yapıyorum ve artık veritabanı referansları ile ilgili bir sorunla karşılaşıyorum. Birbirine referans veren ayrı dosyalarda iki modelim var.MongoDB'de bir artık referans düzgün bir şekilde nasıl silinir?
İşte mankenlerim: Eğer, diyelim ki bir Yayınla silerken
// ./models/user
Var UserSchema = mongoose.Schema({
name: String,
posts: [{type: mongoose.SchemaTypes.ObjectId, ref:'Post'}]
});
// ./models/post
var PostSchema = mongoose.Schema({
title:String,
post_body: String,
posted_by: mongoose.SchemaTypes.ObjectId
});
Sorum şu, nasıl Kullanıcı sonrası dizideki referansı silmek istiyorsunuz? Düşüncem, silme rotasından önce çalıştırmak için bir ara katman oluşturabilirdim ve gönderiyi gerçekten silmeden önce kullanıcının yazı dizisindeki referansı silebilirdim. Bu konuda gitmenin en iyi yolu sayılır mı? İşte
// ./models/post
PostSchema.pre('remove', function(next){
this.model('User').remove({posts: this._id}, next);
});
gerçek yığın post: Automatically remove referencing objects on deletion in MongoDB böyle şemasındaki bir 'ön' fonksiyonunu kullanan Yığın bir yazı buldum. Yine de bu işi alamadım. Bununla birlikte, referansları silmek için özel bir katman yazılımı uyguladım, ancak bunun en iyi uygulama olmadığını düşünüyorum. Herhangi bir ipucu/tavsiye çok takdir edilecektir. Teşekkürler!
Bunu düşünmediğime inanamıyorum. Güncellemeyi kullanmak tamamen anlam ifade ediyor. Memnun olurum. Şimdi, gönderdiğiniz küçük snippet'i denedim, ancak Object ID hala Kullanıcıların gönderim dizisinin içinde kalıyor. Ön fonksiyonda, hem PostSchema.pre ('update' ... 'hem de PostSchema.pre (' remove '... ') kullandım, ancak referansın kaldırılması yok. – elloM8
Çalışmasını aldım. Görünüşe göre, "kaldır" için sorgu çatalı yok. Dokümanlarda belirtildiği gibi: 'Bir' kaldır 'kancası belirlerseniz, MyModel.remove()' yi aradığınızda değil, myDoc.remove() işlevini çağırdığınızda işlenecektir. Yardımınız için minnettarım, daha önce yaptığımdan çok daha temiz/daha iyi. – elloM8