mongoose 尝试从mongodb获取数据时,转换为ObjectId失败

jmp7cifd  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(138)

嗨,我是新的mongodb,我有这个错误来当我击中这个端点localhost:3000/api/v1/tours/1
错误消息

{
    "status": "failure",
    "message": "Cast to ObjectId failed for value \"1\" (type string) at path \"_id\" for model \"Tour\""
}

字符串
Error image

exports.getTour = async (req, res) => {
  try {
    const tour = await Tour.findById(req.params.id);
    res.status(200).json({
      status: 'success',
      data: {
        tour
      }
    });
  } catch (err) {
    res.status(404).json({
      status: 'failure',
      message: err.message
    });
  }
};


这是应该给我给予具有特定id的旅游数据的函数。
我在这里附加架构

const mongoose = require('mongoose');

const tourSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'A tour must have a name'],
    unique: true
  },
  rating: {
    type: Number,
    default: 4.5
  },
  price: {
    type: Number,
    required: [true, 'A tour must have a price']
  }
});

const Tour = mongoose.model('Tour', tourSchema);


以下是atlas数据库mongoose data中的数据

7nbnzgx9

7nbnzgx91#

当您向以下对象发出GET请求时:

localhost:3000/api/v1/tours/1

字符串
您的代码正在抓取req.params.id,即1。由于您将其用作findById()的参数,mongoose试图将1转换为ObjectId,以便它可以找到文档。首先,1不能转换为ObjectId,其次,您没有带有_id === 1的文档。
我认为你需要请求的路线是:

localhost:3000/api/v1/tours/65756e8badeb705e687e7aa9

bweufnob

bweufnob2#

我可以从this图像中看到65756e8badeb705e68Te7aa9,这是您创建的Tour数据的数据ID。
MongoDb使用uuid来创建12字节的随机id,所以你必须传递65756e8badeb705e68Te7aa9作为id来从mongoDb集合中获取数据。

相关问题