2016-11-11 2 views
1

Kann mir jemand bei einem Mangusten-Betrieb helfen? Ich baue gerade dieses Wahlsystem. Ich habe dieses Poll Modell wie:mongo, wie kann man die Referenz mit Middleware korrekt entfernen?

var Poll = new Schema({ 
    title: { 
     type: String, 
     required: true 
    }, 
    options: [{text:String, count: {type: Number, default: 0}}], 
    author: { 
     type: Schema.ObjectId, 
     ref: 'Account', 
    }, 
    disabled: { 
     type:Boolean, 
     default: false, 
    }, 
    date: {type: Date, defalut: Date.now}, 
}); 

und ich habe diese Log-Modell als:

{ ip: '::1', 
    voter: 5824e7c3b6e659459818004f, 
    poll: 58264b48f767f2270452b5cb, 
    _id: 58264b4cf767f2270452b5ce } 
:

var Log = new Schema({ 
    ip: String, 
    voter: { 
     type: Schema.ObjectId, 
     ref: 'Account' 
    }, 
    poll: { 
     type: Schema.ObjectId, 
     ref: 'Poll' 
    }, 
    date: {type: Date, defalut: Date.now}, 
}); 

jedes Mal, wenn ein Benutzer Stimme für etwas, log etwas wie schaffen

sollte jetzt ein Benutzer eine seiner Poll löschen, sagen 58264b48f767f2270452b5cb, ich möchte auch alle Protokolldokumente entfernen, die dieselbe Poll-ID darin hat.

las ich eine andere Antwort und kam eine Middleware mit

Poll.pre('remove', function(next){ 
    var err = new Error('something went wrong'); 
    this.model('Log').remove({poll: this._id}, function(err){ 
    if (err) throw err; 
    }) 

    next(err); 
}); 

, aber es ist gar nicht funktioniert.

was soll ich tun? Vielen Dank.

Antwort

0

Im aktuellen Zustand Model.remove() Anrufe verwenden keine Haken, warum? Da ein Dokument zum Zeitpunkt des Anrufs nicht im Speicher vorhanden sein könnte, wäre es erforderlich, zuerst mongo abzufragen und dann das Dokument zu löschen, um sicherzustellen, dass ein Hook ordnungsgemäß funktioniert.

Es gibt eine CR für das Hinzufügen dieses Verhaltens, ist aber noch nicht implementiert.

So der aktuelle Weg, dies zu tun ist, etwas zu verwenden, wie:

myDoc.remove(); 

Ein Beispiel, das wird nicht funktionieren:

var myAccount = new Account({ 
    name: "jim" 
}) 
var myPoll = new Poll({ 
    question: "You like stuff?" 
}) 
var myLog = new Log({ 
    voter: myAccount, 
    poll: myPoll 
}) 

myAccount.save() 
.then(myPoll.save()) 
.then(myLog.save()) 
.then(Poll.remove({ 
    question: "You like stuff?" 
}, function(err) { 
    console.log(err) 
})) 

Dies funktioniert statt:

myAccount.save() 
.then(myPoll.save()) 
.then(myLog.save()) 
.then(myPoll.remove(function(err) { 
    console.log(err) 
})) 
Verwandte Themen