recorrer - la matriz de objetos javascript no ha cambiado
javascript getelementbyid value (1)
Esta pregunta ya tiene una respuesta aquí:
Este código trata de obtener datos de MongoDB y cambiar el elemento ''_id'' por ''elemento id. Pero encontré que la matriz de objetos no ha cambiado.
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 } ]
*/
pero este código funciona como lo que quiero
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
});
}
});
});
Creo que está relacionado con una copia profunda y superficial. Pero no sé qué lo causa exactamente.
Gracias
Eso es porque Post.find
devuelve un objeto de mangosta basado en el Esquema creado. Lo que estás buscando es la función toObject
que devuelve un objeto javascript puro. Entonces, en su callback call list.toObject();
Puede leer más sobre la función toObject
en la documentación de mongoose: http://mongoosejs.com/docs/api.html#document_Document-toObject
Alternativamente, puede usar la opción Lean que le indicará a mongoose que devuelva un objeto javascript puro: http://mongoosejs.com/docs/api.html#query_Query-lean