Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js CastError:value“的转换为ObjectId失败”;0“;在路径上“;“追随者”;_Node.js_Express_Mongoose - Fatal编程技术网

Node.js CastError:value“的转换为ObjectId失败”;0“;在路径上“;“追随者”;

Node.js CastError:value“的转换为ObjectId失败”;0“;在路径上“;“追随者”;,node.js,express,mongoose,Node.js,Express,Mongoose,我在NodeJS服务器上使用Mongoose。我创建了一个正常工作的跟随路线 router.post("/follow/:id/:followerId", async (req, res) => { const user = await User.findById(req.params.id); const follower = await User.findById(req.params.followerId); try { await User

我在NodeJS服务器上使用Mongoose。我创建了一个正常工作的跟随路线

router.post("/follow/:id/:followerId", async (req, res) => {
  const user = await User.findById(req.params.id);
  const follower = await User.findById(req.params.followerId);

  try {
    await User.findByIdAndUpdate(user, {
      $push: { followers: follower },
    }).then(
      await User.findByIdAndUpdate(follower, {
        $push: { followings: user },
      })
    );

    res.send("Done");
  } catch (error) {
    console.log(error);
  }
});
现在,我为unfollow route创建了反面。但我得到了以下错误:CastError:Cast to ObjectId在路径“followers”处的值“0”失败 原因:错误:传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串

以下是我的展开路线:

router.post("/unfollow/:id/:followerId", async (req, res) => {
  const user = await User.findById(req.params.id);
  const follower = await User.findById(req.params.followerId);

  try {
    await User.findByIdAndUpdate(user, {
      $pull: { followers: follower },
    }).then(
      await User.findByIdAndUpdate(follower, {
        $pull: { followings: user },
      })
    );

    res.send("Done");
  } catch (error) {
    console.log(error);
  }
});
我怎样才能使它工作呢

这是我的模式:

const userSchema = new Schema({
  username: {
    type: String,
    required: true,
  },
  fullName: {
    type: String,
    required: true,
  },
  followers: [
    {
      type: Schema.Types.ObjectId,
      ref: "User",
    },
  ],
  followings: [
    {
      type: Schema.Types.ObjectId,
      ref: "User",
    },
  ],
  active: {
    type: Boolean,
    default: true,
  },
});

请帮助

架构与添加新跟随者/追随者的方式不匹配。 在模式中,follower和follower是ObjectId的数组

 followers: [
    {
      type: Schema.Types.ObjectId,
      ref: "User",
    },
  ],
  followings: [
    {
      type: Schema.Types.ObjectId,
      ref: "User",
    },
  ],
但是,在阵列中添加新的跟随者和跟随者时,将使用整个对象

const user = await User.findById(req.params.id); // user object
const follower = await User.findById(req.params.followerId);

  try {
    await User.findByIdAndUpdate(user, {
      $push: { followers: follower }, // you use the user object instead of the id
    }).then(
      await User.findByIdAndUpdate(follower, {
        $push: { followings: user },
      })
    );
我认为我们应该更改对象的id:

const user = await User.findById(req.params.id);
const follower = await User.findById(req.params.followerId);

  try {
    await User.findByIdAndUpdate(user, {
      $push: { followers: follower._id }, // here we use the id of follower
    }).then(
      await User.findByIdAndUpdate(follower, {
        $push: { followings: user._id },
      })
    );
当我们移除从动件和以下部件时也是如此:

try {
    await User.findByIdAndUpdate(user, {
      $pull: { followers: follower._id },
    }).then(
      await User.findByIdAndUpdate(follower, {
        $pull: { followings: user._id },
      })
    );

注意:您可能需要在数据库中检查followers和followers数组中的内容,如果它们是对象(我认为),您应该更改为id。

尝试
$pull:{followers:req.params.followerId}
它不会再次给出错误,但不会从数组中提取id。它们仍然存在@库恩格朗戈克