2017-12-27 7 views
0

splice ich Keywords mit NodeJS und Express von einem Mungo Dokument zu entfernen versuchen, die ein wenig wie folgt aussieht:Kann nicht Mungo Dokumentschlüssel

{ 
name: "Instagram", 
description: "Image sharing website", 
keywords: [{name:"Image", value: 1}, {name:"sharing", value: 1}, {name:"website"}, {name:"Instagram", value:5}, {name:"application", value: 2}] 
} 

Hier ist der Teil meiner Update-Abfrage, die auf das Problem scheint (es nicht gelöscht die Schlüsselwörter richtig, wenn es viele Schlüsselwörter sind, obwohl es ein paar mal mit paar Stichworte gearbeitet hat):

Model.findOne({_id:req.body.id}, function(err,doc){ 
    for(var i = 0; i < doc.keywords.length; i++){ 
     if(doc.keywords[i].value == 1){ 
      doc.keywords.splice(doc.keywords[i], 1); //does nothing 
      doc.save() 
      console.log(doc.keywords[i]) //Shows the correct keywords to be deleted. 
     } 
    }; 
}) 

Antwort

0

Splice funktioniert nicht auf einem Array von Objekten. Für optionale Lösungen siehe Remove Object from Array using JavaScript. Sonst würde ich eine andere Methode vorschlagen, warum filtern Sie nicht einfach die Schlüsselwörter auf Ihren Notwendigkeiten wie:

doc.keywords = doc.keywords.filter((key) => key.value === 1); 
+0

Der Grund, den ich nicht tue, ist, weil ich die Beschreibung des Gegenstandes aktualisiere, und Die Beschreibung des Objekts erfolgt in Schlüsselwörtern, dh die alten Beschreibungsschlüsselwörter müssen ersetzt werden. –

+0

Verwenden Sie dann keywords.map? Ihr Beispiel schlägt vor, dass Sie einige Elemente aus dem Array Schlüsselwörter entfernen möchten. –

+0

Karte ist in diesem Fall nicht nützlich. Ich muss ein Element im Array finden und es löschen, was nicht richtig funktioniert. Allerdings antwortet die Objekt-Array-Entfernung, die Sie verlinkt sagen, dass ich .splice() verwenden kann. Funktioniert das in meinem Fall nicht wegen node.js oder mongoose? –