Как я могу удалить свойство из объекта, возвращаемого мангустом - PullRequest
2 голосов
/ 30 мая 2020

Я запрашиваю коллекцию пользователей и не хочу отправлять обратно пароль. Я хочу сказать, что могу ли я выполнять javascript операций с объектами mongodb или нет. Вот мой код:

router.get("/:userId", async (req, res) => {
  try {
    const user = await User.findById(req.params.userId);
    delete user.password;
    if (user.parent !== undefined) {
      const referrer = await User.findOne({ _id: user.parent });
      return res.json({ user, referrer });
    }
    res.json(user);
  } catch (error) {
    res.status(400).json(error);
  }
});

Я получаю этот результат

{
    "is_deleted": false,
    "packages": [],
    "_id": "5ed102f3fefa080404db01df",
    "name": "parent",
    "email": "parent@parent.com",
    "gender": "m",
    "password": "$2b$10$HTGaoy.AVmoG/A0c/vkikO0NnEBte7f2tvwt2FQE94bZlNiYTeX8i",
    "__v": 0
}

Я попытался выполнить фильтр по списку объектов mongodb, но это тоже не удалось.

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Я бы использовал findeOne с выступом на конце:

const user = await User.findOne({ _id: req.params.userId },{ password: 0 });

Вы можете исключить больше полей, установив значение 0

1 голос
/ 30 мая 2020

Вы можете деструктурировать объект, возвращенный из запроса

const {password, ...restProps } = await User.findById(req.params.userId);
const user = {...restProps};

Вы также можете настроить модель User так, чтобы поле password по умолчанию исключалось из результата запроса.

const UserSchema = new mongoose.Schema({
    ...
    password: {
       ...
       select: false
    }
});

если вы не хотите исключать поле по умолчанию, вы можете вызвать функцию select и указать свойства, которые вы не хотите включать в результаты запроса.

const user = await User.findById(req.params.userId).select('-password');

подробнее информацию об этом см. SchemaType.prototype.select ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...