2015-12-16 3 views
5

Ho un objectId come questo: ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"] Per salvare le informazioni in mio modello che uso:Rimuovere un ObjectId da un array di objectId

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

Quello che sto cercando di fare è quello di tirare un elemento della matrice che è uguale a objectId che invio dal front-end in una richiesta di cancellazione.

Il codice che sto usando:

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

Sto utilizzando la libreria lodash.

Il problema, suppongo, è che la matrice abbia elementi ObjectId e sto provando a confrontarmi con una stringa che è request.params.itemId.

+0

Si sta tentando di rimuovere un array da un array, o avete una serie di documenti, e si desidera rimuovere quello che corrisponde alla tua req.params.itemId? – steezeburger

risposta

2

Ho un setup molto simile con un oggetto "Event" che ha una matrice di oggetti "Assignment" salvati come array di ObjectIds. Sono stato in grado di utilizzare semplicemente

obj.arrayField.remove(idToRemove); 

Ecco il codice corrispondente all'interno del mio gestore percorso di eliminazione:

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

fa questo lavoro per voi?

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

Grazie a @MosheKarmel, funziona alla grande, ora se voglio fare la differenza, diciamo che ho un array oldItems = ["56153e4c2040efa61b4e267f", "56033932efefe0d8657bbd9e"] e un altro array newItems = ["56033932efefe0d8657bbd9e"], sto cercando di usare la differenza di lodash funziona come questa, _.difference (oldItems, newItems) ma il risultato è ["56153e4c2040efa61b4e267f", "56033932efefe0d8657bbd9e"]. Cosa mi manca? – Diego

+0

Non sono sicuro, non so davvero lodash :(Puoi contrassegnare la mia risposta come corretta se ho risposto alla domanda? Puoi provare a chiederlo come una nuova domanda ... –

+0

Ok grazie @moshe – Diego

1

È necessario passare la stringa in mongoose.Types.ObjectId('') per ottenere un oggetto reale che è possibile confrontare.

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