MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose + lodash estendono la copia dell'array di oggetti in modo errato

Ho appena perso 1 ora su un problema simile. Ho usato _.assign{In}() , quindi _.merge() poi ho provato anche Document#set() ho sempre finito con voci ripetute nell'array.

La soluzione che funziona per me

  • assegna [] a qualsiasi array che sta per essere impostato
  • quindi assegna l'intero albero usando doc.set(attrs)

Esempio (nel mio caso, some_problematic_array ha causato lo stesso strano comportamento della domanda):

var attrs = _.pick(req.body, [
    'name',
    'tags', // ...
    "some_problematic_array"
]);
var doc = ///... ;

if( attrs.some_problematic_array ) doc.some_problematic_array = [];
                                      ^^^^ ***workaround***
doc.set(attrs);