提问:关于给mongoose返回的json数据增加属性的问题
发布于 10 年前 作者 pauky 7051 次浏览 最后一次编辑是 8 年前 来自 问答
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 回复

请调整下 Markdown 语法 http://www.bluesdream.com/blog/markdown-cheatsheet-syntax-manual.html

users 的数据是什么需要的说明一下… 确实很奇怪

console.log(users[0])结果贴上来看看。

mongoose查询出来的其实不是你的User Object,只是mongoosemodel,所以对它赋值没有任何用处。 理论上要这么玩:

User.find({age: 24}, function(error, users){
	console.log(users);
	users.forEach(function(user, index){
		user._doc.name = 'Test' + index;
	});
	console.log(users);
});

插个图.png

@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属性
});
回到顶部