2015-12-16 30 views
5

mir eine objectId wie diese: ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"] Um diese Informationen in meinem Modell zu speichern ich benutze:eine ObjectId aus einem Array von objectId entfernen

items: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Items' 
}] 

Was ich versuche zu tun ist, um ein Element zu ziehen des Arrays, das gleich ist objectId, die ich von der Front-End in einer Löschanforderung senden.

Der Code Ich verwende:

_.remove(unit.items, request.params.itemId); 

ich lodash Bibliothek bin.

Das Problem Ich nehme an, dass das Array ObjectId-Elemente haben, und ich versuche, mit einer Zeichenfolge zu vergleichen, die die request.params.itemId ist.

+0

Sind Sie versuchen, ein Array aus einem Array zu entfernen, oder haben Sie eine Reihe von Dokumenten, und möchten Sie die eine für Ihre req.params.itemId entfernen? – steezeburger

Antwort

2

Ich habe ein sehr ähnliches Setup mit einem "Event" -Objekt, das ein Array von "Assignment" -Objekten als ein Array von ObjectIds gespeichert hat. Ich konnte einfach

obj.arrayField.remove(idToRemove); 

Hier verwenden ist der entsprechende Code in meiner Route löschen Handler:

var id = req.assignment._id; 
req.event.assignments.remove(id); 
req.event.save(function(err, event) { 
    //etc 
} 

macht diese Arbeit für Sie?

unit.items.remove(request.params.itemId); 
+0

Danke @MosheKarmel, funktioniert gut, jetzt, wenn ich einen Unterschied machen will sagen wir ein Array oldItems = ["56153e4c2040efa61b4e267f", "56033932efefe0d8657bbd9e"] und ein anderes Array newItems = ["56033932efefe0d8657bbd9e"], versuche ich zu verwenden lodash-Differenzfunktion wie diese, _.difference (oldItems, newItems), aber das Ergebnis ist ["56153e4c2040efa61b4e267f", "56033932efefe0d8657bbd9e"]. Was ich vermisse? – Diego

+0

Ich bin mir nicht sicher, ich weiß nicht wirklich lodash :(Können Sie meine Antwort als richtig markieren, wenn ich die Frage beantwortet? Sie können versuchen, das als neue Frage zu stellen ... –

+0

Ok danke @moshe – Diego

1

Sie müssen die Zeichenfolge in mongoose.Types.ObjectId('') passieren, um ein tatsächliches Objekt erhalten Sie gegen vergleichen.

So _.remove(unit.items, mongoose.Types.ObjectId(req.params.itemId));

Verwandte Themen