提问:关于给mongoose返回的json数据增加属性的问题
Users.find(id, function (err, users) {
var i = 0;
for (; i < users.length; i += 1) {
users[i].name = 'kk';
}
console.log(users); //结果没有增加name这个属性
JSON.stringify(users); //结果也没有出现name
});
如果是修改属性就可以。 请问下为什么会出现这种情况呢?
10 回复
把console.log(users[0])
结果贴上来看看。
mongoose
查询出来的其实不是你的User Object
,只是mongoose
的model
,所以对它赋值没有任何用处。
理论上要这么玩:
User.find({age: 24}, function(error, users){
console.log(users);
users.forEach(function(user, index){
user._doc.name = 'Test' + index;
});
console.log(users);
});
@saionjisekai 求问这个图片内容是用啥工具看到的
@eeandrew - - ,WebStorm打个断点…
用 toObject()
进行转换
哈哈,感谢大家的热情。我测试了下,3楼saionjisekai的方法是对的。谢谢。 6楼jiangli373的方法我也做了下,
Users.find(id, function (err, users) {
var i = 0,
mo = users.toObject();
for (; i < mo.length; i += 1) {
mo[i].name = 'kk';
}
console.log(mo); //结果显示增加了name这个属性
console.log(JSON.stringify(mo)); //不显示任何数据,好像无法序列化的样子
});
请问:toObject()后的对象无法序列化,这又是怎么回事呢?
Users.find(id, function (err, users) {
var data = users.map(function (user, id) {
var mo = user.toObject();
mo.name = 'kk';
return mo;
});
console.log(data); //添加了name属性
console.log(JSON.stringify(data)); //顺序序列化
});
toObject()是mongoose返回文档(user)的方法,不是文档数组(users)的方法…
厉害,我也遇到过这个问题,现在看到这些解决办法,再看看自己的傻办法。,早知道我了发个贴子问一下。 贴上我的方法
Users.find(id, function (err, users) {
var data = users.map(function (user, id) {
var mo = JSON.stringify(user);
mo = JSON.parse(mo);
mo.name = 'kk';
return mo;
});
console.log(data); //添加了name属性
});