当前位置: 首页 > 知识库问答 >
问题:

带有引用数组的Mongoose模型架构:CastError:对值“[”5f09b...,5f0d...]“的ObjectId进行强制转换失败

楚嘉胜
2023-03-14

我已经看过这篇文章:带有引用数组的Mongoose模型模式:CastError:对于值“[object object]”,向ObjectId转换失败

const mongoose = require("mongoose");

const categorySchema = new mongoose.Schema(
  {
    name: {
      type: String,
      trim: true,
      required: true,
      maxlength: 32,
      unique: true,
    },
  },
  { timestamps: true }
);

module.exports = mongoose.model("Category", categorySchema);
const { ObjectId } = mongoose.Schema;
category: [
  {
    type: ObjectId,
    ref: "Category",
    required: true,
  },
], 
Error: Product validation failed: category: Cast to [ObjectId] failed for value "["5f09bc7d75350639906e0822,5f0df6442400aa0344d64347"]" at path "category"

stringValue: '"["5f09bc7d75350639906e0822,5f0df6442400aa0344d64347"]"',
messageFormat: undefined,
kind: '[ObjectId]',
value: '["5f09bc7d75350639906e0822,5f0df6442400aa0344d64347"]',
path: 'category',
reason: [CastError] } },

我是如何制作产品的:

form.parse(req, (err, fields, file) => {
    if (err) {
      return res.status(400).json({
        error: "Problem with image",
      });
    }
    //destructure the fields
    const { name, description, price, category, stock } = fields;
    if (!name || !description || !price || !category || !stock) {
      return res.status(400).json({
        error: "All fields are required!",
      });
    }
    //TODO : rescrition on fields
    let product = new Product(fields);

共有1个答案

吕新
2023-03-14

你的问题是fields.category是一个字符串,你必须把它转换成一个数组。

这应该有效:

form.parse(req, (err, fields, file) => {
        if (err) {
          return res.status(400).json({
            error: "Problem with image",
          });
        }
        //destructure the fields
        const { name, description, price, category, stock } = fields;
        if (!name || !description || !price || !category || !stock) {
          return res.status(400).json({
            error: "All fields are required!",
          });
        }
        fields.category = category.split(",");
        //TODO : rescrition on fields
        let product = new Product(fields);
 类似资料:
  • 前言:我对猫鼬/Express的工作相对来说是新手。 我试图制作一个应用程序,其中一个名为“space”的猫鼬模式中有一个名为“posts”的数组。数组的内容是对另一个名为“POST”的猫鼬模式的ObjectId引用。然而,每次我对应该发送回我的空间和其中的帖子的路线提出GET请求时,我都会得到一个严重的错误。此外,我的帖子没有填充我的空间。 错误:CastError:对于模型“space”的路径

  • 嘿,伙计们真的需要一些关于删除路由的帮助。我正在使用RESTful路由,尝试遵循约定,添加删除路由时,我得到错误: CastError:模型"Blog"的路径"_id"处的值"X"转换为ObjectId失败 我已经在stackoverflow上搜索了这个问题,我能想到的最好的版本是猫鼬有一个错误。我把它回滚到V4.10.0,仍然在处理这个问题。我的代码如下:

  • 我希望有人能帮我找出我在这里做错了什么。我一直在寻找,我可以找到很多类似的问题,但没有一个我足够聪明来解决我的问题。我得到以下错误: CastError:对于模型“customer”的路径“\u id”处的值“customers”,转换为ObjectId失败 它以前是有效的,我设法打破了它,我解开了所有我认为我改变了的东西,我仍然得到了错误。 这是我的模式: 我的路线: 和我的控制器: 此外,以下

  • 好吧,我看到这里有一些这样的帖子,但他们没有帮助我。。。 让我描述一下我的问题: 我有两个模式 现在我已经有了一个B对象,我想创建一个a对象。 所以我这样做: b对象是从我的monogDB加载的。调试器为我的b显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDáb)。 但是,当我保存新的A-Object时,会出现错误:“CastError:Cast

  • 我试图在一个MEAN堆栈应用程序中处理一个计划。当我调用findOne时,我得到了这个错误: 我就是这样做的: 我注意到,当我把id作为一个字符串(如下所示)时,一切正常。 所以,我控制台: 我一直在尝试我在这里找到的东西,但任何东西都可以帮助我解决这个问题:/

  • 我正在做一个MEAN堆栈项目,用户可以添加帖子,编辑和删除它们。但是在执行所需的方法后,帖子没有被删除,我面临一个错误。我是新来的意思堆栈。 posts.service.ts 应用程序。js 帖子。组件。ts 帖子。组成部分html 发布模型。js(用于后端) 这是我每次尝试删除任何帖子时都会遇到的错误:- 错误: CastError: Cast to ObjectId在模型“Post”的路径“_