【问题标题】:Unable to update MongoDB collection by matching _id无法通过匹配 _id 更新 MongoDB 集合
【发布时间】:2021-08-16 21:28:16
【问题描述】:

首先,我使用他的电子邮件和密码注册了一个用户。

现在如果

我尝试在注册用户时通过匹配 Mongo 数据库分配的 ID 来更新或制作用户详细信息。

它不接受它。

错误是这样的

Parameter "filter" to find() must be an object, got 60b10821af9b63424cf427e8

如果我像这样解析它

Model.find(parseInt(req.params.id))

它显示一个不同的错误。

这里是发布请求

//Post request to create user details by matching Id.
// Id I am trying to match is the id that was given by the database


app.post("/user/:id", async(req, res) => {
    console.log("not found");

    if (await Model.find(req.params.id)) {
        const users = new Model({
            fName: req.body.fName,
            sName: req.body.sName,
            birth: req.body.birth,
            phone: req.body.phone,
            SSN: req.body.SSN
        });
        const result = await users.save();
        console.log(result);
        return res.send({
            "Success": true,
        });
    } else {
        console.log(req.params.id);
        res.status(404).send({ "message": false });
    }
});

这是架构

const LoginSchema = new mongoose.Schema({
    email: { type: String, required: true },
    password: { type: String, required: false },
    otp: String,
    token: String,
    fName: String,
    sName: String,
    birth: Number,
    phone: Number,
    SSN: Number

});

这是我使用的标题

const express = require("express");
const app = express();
const mongoose = require("mongoose");
app.use(express.json());
app.use(express.urlencoded({ extend: true }));


Database id assigned which I use

{
  _id: 60b1131271129a3cf8275160,
  email: 'Pak@gmail.com',
  password: '$2b$10$FWAHu4lP9vn14zS/tWPHUuQJlO7mjAUTlPj.FliFAZmCNA23JA3Ky',
  __v: 0
}

【问题讨论】:

    标签: node.js mongodb mongoose postman


    【解决方案1】:

    这个错误很可能是因为当 Mongoose 期待 mongoose.Types.ObjectId 的实例时,您从请求中传递了一个字符串。您应该能够通过将字符串转换为所述类型来解决问题。

    await Model.find(mongoose.Types.ObjectId(req.params.id))
    

    【讨论】:

      【解决方案2】:

      错误:

      Parameter "filter" to find() must be an object, got 60b10821af9b63424cf427e8
      

      表示:您需要提供一个 object 作为find() 方法的参数,而不是字符串(在本例中为“60b10821af9b63424cf427e8”)。此外,find() 会给你一个数组,如果你在数据库中找到一个项目,请改用findOne()

      更改自:

      await Model.find(req.params.id)
      

      到:

      await Model.findOne({_id : req.params.id})
      

      另一种方法是像这样使用findById() 方法:await Model.findById(req.params.id)

      【讨论】:

        猜你喜欢
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多