2017-04-07 20 views
5

Mã này là về tìm nạp dữ liệu từ MongoDB và thay đổi phần tử '_id' thành 'id element. Nhưng tôi thấy mảng đối tượng không thay đổi.mảng đối tượng javascript không được thay đổi

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 } ] 
    */ 

nhưng công việc mã này là những gì tôi muốn

 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 
     }); 
    } 
}); 

});

Tôi nghĩ rằng nó liên quan đến bản sao sâu và nông. Nhưng tôi không biết nguyên nhân chính xác là gì.

Cảm ơn

Trả lời

2

Đó là bởi vì Post.find lợi nhuận một loại chồn đối tượng dựa trên Schema tạo. Những gì bạn đang tìm kiếm là hàm toObject trả về đối tượng javascript thuần túy. Vì vậy, trong cuộc gọi callback của bạn list.toObject(); Bạn có thể đọc thêm về toObject hàm trong tài liệu hướng dẫn cầy mangut của: http://mongoosejs.com/docs/api.html#document_Document-toObject

Ngoài ra, bạn có thể sử dụng tùy chọn nạc mà sẽ cho cầy mangut trở về đối tượng javascript tinh khiết:

Các vấn đề liên quan