FindOneAndUpdate переопределяет и обновляет только первый идентификатор

Я просто пытаюсь обновить содержимое в соответствии с идентификатором, но какой бы идентификатор я ни использовал, он обновляет только первый идентификатор, переопределяя его. Поток идет как роуты => контроллер => репозиторий Ниже приведен код: Маршруты =>

      router.post("/:pageId/content", async (req, res, next) => {
  try {
    const pageId = req.params;
    const pageContent = req.body;
    if (!pageId || !pageContent) {
      throw {
        statusCode: 200,
        customMessage: "All parameters are required"
      };
    }
    const result: any = await webpageController.createContent(
      pageId,
      pageContent
    );
    if (result.isError) {
      throw result.error;
    }
    res.status(200).json(result.data);
  } catch (error) {
    next(error);
  }
});

Контроллер =>

      const createContent = async (pageId: any, pageContent: any) => {
  try {
    // calls repository to create content
    const result = await webpageRepository.createContent(pageId, pageContent);
    // if result is not success, throw error
    if (!result.success) {
      throw {
        statusCode: 400,
        customMessage: "Unable to create web page content"
      };
    }

    return {
      isError: false,
      data: result.data
    };

Репозиторий =>

      export const createContent = async (pageId: any, content: any) => {
  try {
    const result = await webpage.findOneAndUpdate(pageId, { content });
    return {
      data: result,
      success: true
    };
  } catch (error) {
    logger.error(
      `at:"repositories/webpage/createContent" => ${JSON.stringify(error)}`
    );
    return {
      success: false
    };
  }
};

Здесь видно, что идентификатор, который я использовал в маршруте, и идентификатор, который обновляется, отличаются. Что я здесь делаю неправильно?

Ниже приведена схема:

      const mongoose = require('mongoose');
const { Schema } = mongoose;

const webpage = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
      trim: true,
      maxlength: 25,
    },
    slug: {
      type: String,
    //   required: true,
    },
    url: {
      type: String,
      required: true,
      unique: true
    },
    content: Object,
  },
  {
    timestamps: true,
  },
);

export default mongoose.model('webpages', webpage);

2 ответа

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

      const result = await webpage.findOneAndUpdate({_id:pageId.pageId}, {content});

Вы можете проверить эту документацию о том, как использовать «findOneAndUpdate» https://mongoosejs.com/docs/tutorials/findoneandupdate.html#getting-started .

Это сработало для меня

      const result = await webpage.findOneAndUpdate(   {_id:pageId.pageId} , { content });
Другие вопросы по тегам