2017-06-03 6 views
1

Ich habe ein Schema namens ReferralHistory. Es enthält eine Gruppe von Benutzern und ein Array von Benutzern, auf die verwiesen wird.Löschen Sie ein Array-Element aus einem Dokument mit Mongoose

ReferralHistory

var mongoose = require('mongoose'); 
var refferalHistorySchema = new mongoose.Schema({ 
    user: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User', 
     unique: true 
    }, 

    referrals: [{ 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User' 
    }], 
}); 
var ReferralHistoryModel = mongoose.model('ReferralHistory', refferalHistorySchema); 
module.exports = { 
    referralHistory: ReferralHistoryModel 
} 

Ich brauche einen bestimmten Benutzer aus Empfehlungen Array in der Sammlung ReferralHistory [Hier Ich weiß id bezeichnet Benutzer nur] löschen .Wie kann ich das erreichen?

bearbeiten

Sammlung enter image description here

Ich versuchte

db.referralhistories.update({ "u_referrals": "593281ef966d7f0eeb94db3d" }, { "$pull": { "u_referrals": "593281ef966d7f0eeb94db3d" } }); 

O/Penter image description here

Das Dokument wird nicht aktualisiert.

Antwort

1

Sie verwenden den Operator $pull mit .update(). So referredId als der Wert unter der Annahme, wissen Sie

ReferralHistoryModel.update(
    { "referrals": referredId }, 
    { "$pull": { "referrals": referredId } }, 
    { "multi": true }, 
    function(err,status) { 

    } 
) 

die { "multi": true } Kenntnis nehmend Mittel kann das Update auf mehr als eine abgestimmte Dokument in der Sammlung angewendet werden. Wenn Sie wirklich nur ein Dokument abgleichen und aktualisieren möchten, schließen Sie diese Option nicht ein, da nur die erste Übereinstimmung aktualisiert wird.

Wenn Sie spezifischere und auch die „user“ sein müssen übereinstimmen, dann können Sie tun:

ReferralHistoryModel.update(
    { "user": userId, "referrals": referredId }, 
    { "$pull": { "referrals": referredId } }, 
    { "multi": true }, 
    function(err,status) { 

    } 
) 

Und dann muss das Spiel beide Werte vorhanden sein, im Gegensatz zu jedeReferralhistoryModel Dokumente, die mit dem von Ihnen gelieferten übereinstimmen.

+0

Vielen Dank für Ihre Antwort.Ich habe Ihre Lösung versucht.Aber nicht das Ergebnis.Aktualisiert die Frage – Muhsin

+0

@Muhsin, weil Sie das in der Shell/robomongo/was auch immer eingeben. Die Werte sind 'ObjectId' und keine Zeichenketten. In der Shell müssen Sie 'ObjectId (" 593281ef966d7f0eeb94db3d ")' verwenden, um zu passen. Mungo aber wird den Typ für dich werfen. –

+0

Es hat jetzt funktioniert. Vielen Dank für Ihre Hilfe. Das ist sehr hilfreich für mich. – Muhsin

Verwandte Themen