我正在使用mongoose通过它的id找到一个用户,但它不能正常工作。我尝试了几种不同的方法,但只得到了错误的结果或错误。
这是我的代码。
const { id } = req.params;
const user = await User.findOne({ id });
console.log(id);
console.log(user);
return res.redirect("back");
我尝试了以下方法
1 -await User.findOne({ id });
返回第一个用户,无论其ID是什么。
target id: a8fc083f3f55494fa2cadf9
{
_id: new ObjectId("618fb03e37876d1f0bccb945"),
name: 'bohetefyhy',
email: 'refo@mailinator.com',
dataRealm: new ObjectId("618fb0119eefb1308fe65610"),
role: 'user',
createdAt: 2021-11-13T12:31:58.846Z,
updatedAt: 2021-11-15T08:03:34.422Z,
__v: 0
}
2 -await User.findOne({ id: id });
返回与上述(1)相同的结果。
3 -await User.findOne({ _id: id });
产生错误。
CastError: Cast to ObjectId failed for value "a8fc083f3f55494fa2cadf9" (type string) at path "_id" for model "User"
at model.Query.exec (C:\Users\khan\Documents\Projects\030FL014_Windshield\app\node_modules\mongoose\lib\query.js:4545:21)
at model.Query.Query.then (C:\Users\khan\Documents\Projects\030FL014_Windshield\app\node_modules\mongoose\lib\query.js:4644:15)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
我还注意到,在结果中缺少mongoose添加的id字段。对于**_id**,值是新的ObjectId(“618 fb 03 e37876 d1 f0 bccb 945”),而不是简单的**“618 fb 03 e37876 d1 f0 bccb 945”**
我正在使用
“ Mongoose ”:“^6.0.12”,
SSL安全协议(64位)
好的,我发现了这个问题,我的对象ID中只有23个字符,其中一个从开始就缺失了。但是为什么ID字段缺失mongoose add,为什么在我进行日志记录时there _id是new ObjectId(“618 fb 03 e37876 d1 f0 bccb 945”)而不是简单的**“618 fb 03 e37876 d1 f0 bccb 945”**
8条答案
按热度按时间o75abkj41#
我也遇到了同样的问题,这就是我如何解决的,以获得数据的身份证,我正在寻找。
这是我为用户提供的信息数据
Users information data
输出:
n1bvdmb62#
我今天遇到了同样类型的问题,并通过community guideline解决了它。
我用这些简单的代码解决了这个问题。也许你也可以试试。这里我用电子邮件试了一下,你可以用_id试一下。我发现它们都是有效的。
ijxebb2r3#
Mongoose的findById方法将id参数转换为模型的_id字段的类型,以便它可以正确地查询匹配的文档。
请尝试同时检查
或
8iwquhpp4#
尝试:
vfwfrxfs5#
试试这个我希望它能起作用:
bfhwhh0e6#
您可以通过添加以下代码段开始调试该问题,并尝试检查mongoose查询是否传递了您传递的所有参数:
我也遇到过类似的问题,我能够通过如下所示的_id更新模式来解决这个问题:
xdyibdwo7#
我使用的是mongodb v6.0.0版,这对我很有效。
用户ID类型:字符串
suzh9iv88#
我希望它能起作用