Я пишу простой сервер в JavaScript на Node.js, который (среди прочего) позволяет пользователю управлять своей учетной записью (базовые функции CRUD и т. Д.), , Сервер подключается к экземпляру MongoDB, используя Mongoose для управления соединением и данными.Удаление атрибута из объекта JavaScript, возвращенного методом Mongoose «findOneAndUpdate»
Модели в 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
(в данном случае, 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
все еще там. Что я делаю не так? Любая помощь будет принята с благодарностью.
Спасибо!
Это замечательно! Спасибо за ваш ответ! –
Кроме того, чтобы добавить к этому, я закончил явно создание атрибута «_id» в схеме и изменил свойство «select» на false, как и то, что вы сделали с вашим атрибутом passwordHash. –
Чтобы добавить назад несколько, отделите их во втором параметре с пробелами: '' + prop1 + prop2'' –