2017-04-07 33 views
5

Ten kod dotyczy pobierania danych z MongoDB i zmieniania elementu "_id" na element id. Ale znalazłem tablicę obiektów nie została zmieniona.Tablica obiektów javascript nie została zmieniona.

router.get('/loadList', (req,res) => { 
Post.find({}, (err, list) => {   //fetching data to list 
    if(err) { 
     return res.json({success : false}); 
    } else { 
     let new_list; 

     //change _id to id 
     new_list = list.map((obj) => { 
      obj.id = obj._id; 
      delete obj._id; 
      return obj; 
     }); 

     console.log(new_list); 

    /* 
    // _id is still here and id is not created 
    [{_id: '58e65b2d1545fe14dcb7aac5', 
    title: 'asdfassafasdf', 
    content: 'dfasfdasdf', 
    time: '2017-04-06T15:13:49.516Z', 
    writer: { _id: '100975133897189074897', displayName: 'Kiyeop Yang' }, 
    coords: { y: '310.3999786376953', x: '139' }, 
    __v: 0 } ] 
    */ 

ale ta praca kod jak co chcę

 let list2 = JSON.parse(JSON.stringify(list)); 
     new_list = list2.map((obj) => { 
      obj.id = obj._id; 
      delete obj._id; 
      return obj; 
     }); 
     console.log(new_list); 
    /* 
    // _id is deleted and id is created 
    { title: 'asdfassafasdf', 
    content: 'dfasfdasdf', 
    time: '2017-04-06T15:13:49.516Z', 
    writer: { _id: '100975133897189074897', displayName: 'Kiyeop Yang' }, 
    coords: { y: '310.3999786376953', x: '139' }, 
    __v: 0, 
    id: '58e65b2d1545fe14dcb7aac5' } ] 
*/ 

     return res.json({ 
      success : true, 
      list 
     }); 
    } 
}); 

});

Myślę, że jest to związane z głęboką i płytką kopią. Ale nie wiem, co to dokładnie powoduje.

Dzięki

Odpowiedz

2

To dlatego Post.find powraca mangusta obiektu na podstawie stworzonego schematu. To, czego szukasz, to funkcja, która zwraca czysty obiekt javascript. Więc rozmowy zwrotnej list.toObject(); Można przeczytać więcej o toObject funkcji w dokumentacji Mongoose za: http://mongoosejs.com/docs/api.html#document_Document-toObject

Alternatywnie, można użyć chudego opcję, która powie mongoose powrót czystego JavaScript Object: