Ошибка Mongoose: переданный аргумент должен быть одной строкой из 12 байт или строкой из 24 шестнадцатеричных символов

#mongodb #mongoose

#mongodb #mongoose

Вопрос:

Я создаю пользователя с помощью Mongoose, и я хочу использовать свой собственный _id . Я думал, что вы можете преобразовать любую строку в an ObjectId с помощью следующего кода: mongoose.Types.ObjectId('4fhTTRkUYNPBUSiYIhz8YHZ9wQ02') . Это то, что предложили несколько других ответов на переполнение стека. Однако, когда я использую этот код в Node, я получаю следующую ошибку: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters .

Что я делаю не так?

 router.post("/create_user", (req, res) => {
  const id = req.body.id;
  
  console.log("/create_user id : ", id); // <-- logging successfully '4fhTTRkUYNPBUSiYIhz8YHZ9wQ02'
  
  User.create({
    _id: mongoose.Types.ObjectId(id), // <-- generating error
    name: "Joe"
  })
  .then((u) => {
    return res.json({ user: u });
  })
  .catch((err) => {
    console.log("/create_user error : ", err);
    return res.json({ error: err });
  });
});
  

Ответ №1:

Я думал, что вы можете преобразовать любую строку в ObjectId

Это не так, только некоторые строки являются допустимыми идентификаторами объектов.

Комментарии:

1. Можете ли вы уточнить?

2. Я предлагаю вам обратиться к документации.