Я пишу простой сервер в JavaScript на Node.js, который (среди прочего) позволяет пользователю управлять своей учетной записью (базовые функции CRUD и т.д.). Сервер подключается к экземпляру MongoDB, используя Mongoose для управления соединением и данными.
Модели в Mongoose имеют метод под названием findOneAndUpdate()
, который делает именно то, что, по вашему мнению, он делает: запрашивает базу данных для первого возвращенного документа и обновляет указанный документ на основе параметров, которые вы передали. Затем он возвращает пользователю новый обновленный документ. Он работает точно так, как предполагалось, и у меня нет проблем с ним.
Однако я не хочу, чтобы ВСЕ данные пользователя возвращались. В частности, я хотел бы опустить поля _id
и password
. Поскольку объект, возвращенный 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;
Для ясности, 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": "[email protected]", "password": "SUPER_SECURE_PASSWORD_HASH_COME_AT_ME_NSA", "token": "IM_A_TOKEN_GAIS_SRSLY", "username": "jim_bob"}}
Как видите, _id
и password
все еще существуют. Что я делаю не так? Любая помощь будет принята с благодарностью.
Спасибо!