我正在 Node.js 上用 JavaScript 编写一个简单的服务器,它(除其他外)允许用户管理他们的帐户(基本的 CRUD 功能等)。服务器连接到一个 MongoDB 实例,使用 Mongoose 来管理连接和数据。
Mongoose 中的模型有一个名为 的方法findOneAndUpdate()
,它完全按照您的想法执行:查询数据库以获取返回的第一个文档,并根据您传递的参数更新所述文档。然后它将新的、更新的文档返回给用户。它完全按预期工作,我对此没有任何问题。
但是,我不希望返回所有用户数据。具体来说,我想省略_id
andpassword
字段。由于 MongoDB 返回的对象是一个基本的 JavaScript 对象,我假设我可以通过调用delete object.attribute
. 不幸的是,由于某种原因,这不起作用。
这是我更新用户信息的代码:
case "update":
User.findOneAndUpdate({"token": header.token}, body, function(err, user) {
if (err) {
return callback(err);
} else {
delete user["_id"];
delete user["password"];
return callback(null, new SuccessEnvelope(user));
}
});
break;
为清楚起见, an Envelope
(在本例中为 a SuccessEnvelope
)是客户端和服务器为了促进通信而需要的一组信息。类似于 TCP 数据包。总之,我离题了...
例如,如果我想将我的用户名从“joe_bob”更新为“jim_bob”,我会将其发送到服务器:
{"header": "type": "user", "method": "update", "token": "IM_A_TOKEN_GAIS_SRSLY"}, "body": {"username": "jim_bob"}}
虽然用户的用户名更新成功,但这是我得到的回报:
{"header": {"type": "success"}, "body": {"__v": 0, "_id":"SOME_NUMERICAL_ID", "email": "joe_bob@email.com", "password": "SUPER_SECURE_PASSWORD_HASH_COME_AT_ME_NSA", "token": "IM_A_TOKEN_GAIS_SRSLY", "username": "jim_bob"}}
如您所见,_id
并且password
仍然存在。我究竟做错了什么?任何帮助将不胜感激。
谢谢!