MongoDB 模型“”的路径“”中的值“”转换为 ObjectId 失败

MongoDB Cast to ObjectId failed for value "" at path "" for model ""

我有一个使用会话的简单代码,它检查会话中是否有 user_id 属性,然后使用它并使用 mongoose 数据库找到该用户。 这是代码:

let user_id = req.session.user_id;
    if(user_id)
    {
        const user = await User.findById({ user_id });
        req.user = user;
        req.userobjs = await Utilities.GetAllObjs(req.user);
    }

一个用户看起来像这样:

{
  projects: {
    journals: [
      new ObjectId("61841e95088d9c1a65a8ddc9"),
      new ObjectId("61841ee6088d9c1a65a8de13")
    ],
    lists: []
  },
  _id: new ObjectId("61841e86088d9c1a65a8ddc4"),
  username: 'dd',
  password: 'b$CfEYYSDycuxO9Slv1C8Fu.WHOeiBgTiJfToOSUozMGNyWduZY5pLW',
  __v: 6
}

而且,您可能认为来自会话的 user_id 字符串在代码中使用如下所示:

61841e86088d9c1a65a8ddc4

但问题是,在会话中使用有效 user_id 执行代码时,出现此错误:

UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "{ user_id: '61841e86088d9c1a65a8ddc4' }" (type Object) at path "_id" for model "User"[=25] =]

问题出在这里:

if(user_id)
{
    let user = await User.findById({user_id});
    req.user = user;

函数 Model.findById 只需要一个字符串参数,我通过 {} 绕过它。

它应该是这样的:

    let user = await User.findById(user_id); //without {}