mongodb 为什么findOne({ id })无法在mongoose 6.012中正常工作

czfnxgou  于 2022-11-28  发布在  Go
关注(0)|答案(8)|浏览(104)

我正在使用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”**

o75abkj4

o75abkj41#

我也遇到了同样的问题,这就是我如何解决的,以获得数据的身份证,我正在寻找。

const ObjectId = require('mongodb').ObjectId;

const id = '61929f3efc232d63cd9dcb6b';

user.findOne({ _id: ObjectId(id) })
.then((result) => {
 console.log(result);
})
.catch((err) => {
 console.log(err);
});

这是我为用户提供的信息数据
Users information data
输出:

{
  _id: new ObjectId("61929f3efc232d63cd9dcb6b"),
  name: 'Ibrahem',
  email: 'I-A-H@hotmail.com',
  age: 24,
  createdAt: 2021-11-15T17:56:14.089Z,
  updatedAt: 2021-11-15T17:56:14.089Z,
  __v: 0
}
n1bvdmb6

n1bvdmb62#

我今天遇到了同样类型的问题,并通过community guideline解决了它。
我用这些简单的代码解决了这个问题。也许你也可以试试。这里我用电子邮件试了一下,你可以用_id试一下。我发现它们都是有效的。

const router = require('express').Router();
const userModel = require('../models/usermodel');

    router.post('/api/user/registration', async (req, res) => {
    const emailX = req.body.email;
    const emailExist = await userModel.findOne({'email': emailX }); // Finding the Email exist or not
    console.log(emailX, "Email Exist: =>", emailExist);
})
ijxebb2r

ijxebb2r3#

Mongoose的findById方法将id参数转换为模型的_id字段的类型,以便它可以正确地查询匹配的文档。
请尝试同时检查

if (id.match(/^[0-9a-fA-F]{24}$/)) {
  // Yes, it's a valid ObjectId, proceed with `findById` call.
}

var mongoose = require('mongoose');
mongoose.Types.ObjectId.isValid('your id here');
8iwquhpp

8iwquhpp4#

尝试:

await User.findOne({ _id: mongoose.Types.ObjectId(id) });
vfwfrxfs

vfwfrxfs5#

试试这个我希望它能起作用:

const {id} = req.params

await User.findOne({_id: ObjectId(id)})
bfhwhh0e

bfhwhh0e6#

您可以通过添加以下代码段开始调试该问题,并尝试检查mongoose查询是否传递了您传递的所有参数:

mongoose.set('debug', true);

我也遇到过类似的问题,我能够通过如下所示的_id更新模式来解决这个问题:

_id:  mongoose.Types.ObjectId
xdyibdwo

xdyibdwo7#

我使用的是mongodb v6.0.0版,这对我很有效。

const User = mongoose.model("User", userSchema); 

const userID="123123123123";

User.findOne({ _id: userID }, function (err, foundItem) { 
      console.log("foundItem: "+foundItem);
    }

用户ID类型:字符串

suzh9iv8

suzh9iv88#

我希望它能起作用

const { id } = req.params;
const user = await User.findById({ _id: id });

相关问题