@Urukhayy

Где может теряться ObjectID и заменяться на string?

Back-end часть, произведя выборку из Mongoose, отдает с помощью Express (res.send) на front-end JSON (Массив объектов. У каждого объекта имеется _id, который присвоен автоматически). После того, как на front-end из массива по одному будут извлечены объекты и подвергнуты изменениям, они по одному возвращаются на back-end через http (POST-запрос, type: application/JSON) в Angular. Когда back-end принимает (через express) измененные объекты и пытается обновить их, то _id, пришедший с front-end и извлекающийся через req.body._id, не соответствует формату ObjectId — Mongo дает ошибку, что это не тип ObjectId. Возможно, он стал строкой. Пробовал применять функцию ObjectId(req.body._id), но выдаёт ошибку: "hex not a function".

Но если проделать те же операции, но без передачи их на front-end, то _id сохраняет свой тип (ObjectId) и нормально подаётся в базу.

Где может теряться ObjectID, и заменяться на string?
  • Вопрос задан
  • 354 просмотра
Пригласить эксперта
Ответы на вопрос 1
Romuelson
@Romuelson
FSE/M(EN)RN
ObjectId является специфическим типом данных MongoDB, который используется для уникальной идентификации документов в коллекции. Чтобы передать ObjectId через JSON, вам нужно преобразовать его в строку, используя метод toString().

ObjectId является бинарным объектом, поэтому он не может быть напрямую передан через JSON без конвертации его в строку. Однако можно использовать метод toHexString() для конвертации ObjectId в строку и передать его через JSON.

При чтении из JSON вы можете использовать ObjectId.createFromHexString(jsonData._id) чтобы преобразовать обратно в ObjectId.

Набросок с применением mongoose:
const { product_id } = props;

const convertObjectId = (id: string) => mongoose.Types.ObjectId.createFromHexString(id);

const oid = convertObjectId(product_id);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы