我在Node.js中调用了MongoDB。该调用返回一个用户列表,每个用户都有各种字段,如姓名,电子邮件,角色。返回的其中一个字段是_id
。当我将数据发送回应用程序的前端时,我想要一个没有下划线的字段,所以我创建了一个for循环来迭代列表并添加新密钥。见下文:
//find all users
User.find({}).select("_id name email locked logins role created lastLogin").exec(function(err, users) {
//error fetching users
if (err) throw err;
//add new id key
for (var i=0; i<users.length; i++) {
users[i].id = users[i]._id;
}
//send user list
res.send(users);
});
现在我的问题是res.send(users)
似乎没有发送更改版本,只发送原始数据。如果我将以下内容放在for loop
:
for (var i=0; i<users.length; i++) {
users[i].id = users[i]._id;
console.log(users[i].id);
}
然后我记录了新字段。但是,如果我在for循环之后执行console.log(users)
,则会获得原始未更改的数据。这就像它正在执行for loop
,然后在res.send
完成它之前执行for loop
。
答案 0 :(得分:4)
我认为mongoose阻止您设置id
,因为它未在User
模型中定义。如果您希望这样做,请在模型中添加值id
的字段mongoose.Types.ObjectId
。