This code is about fetching data from MongoDB and changing '_id' element to 'id element. But I found object array is not changed.
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 } ]
*/
but this code work as what I want
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
});
}
});
});
I think it is related with deep and shallow copy. But I don't know what cause it exactly.
Thanks
That's because Post.find
returns mongoose object based on created Schema. What you are looking for is toObject
function that returns pure javascript object.
So in your callback call list.toObject();
You can read more about toObject
function in mongoose's documentation: http://mongoosejs.com/docs/api.html#document_Document-toObject
Alternatively, you can use lean option which will tell mongoose to return pure javascript object: http://mongoosejs.com/docs/api.html#query_Query-lean
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With