【问题标题】:Fetching data from fields other than ObjectId from MongoDb using NodeJS Express server使用 NodeJS Express 服务器从 MongoDb 中的 ObjectId 以外的字段中获取数据
【发布时间】:2020-08-23 22:02:22
【问题描述】:

我想使用 router.get 来从我的集合中获取数据,而不必使用自动生成的 _id 字段。我一直在收到错误:

"message": "Cast to ObjectId failed for value \"xxxxxxxxxx\" at path \"_id\" for model \"Member\""

这是我的路线:

GET http://localhost:3000/members/xxxxxxxxxx

这是我的请求函数

async function getMemberBySSN(req, res, next) {
    let member
    try {
        member = Member.find({ ssn: req.params.ssn }, null);
        if (member == null) {
            return res.status(404).json({ message: "Cannot find member" });
        }
    } catch(e) {
        return res.status(500).json({ message: e.message });
    }
    res.member = member
    next();
}

我从这条路线调用:

router.get("/:ssn", getMemberBySSN, (req, res) => {
    res.json(res.member);
})

这是模型

const mongoose = require("mongoose");

// Object containing keys for different props in member
const memberSchema = new mongoose.Schema({
    ssn: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        require: true
    },
    isJunior: {
        type: Boolean,
        required: true
    },
    isAdmin: {
        type: Boolean,
        required: true
    },
});

//params: name of model in db, the schema that corresponds to the model, the collection in db
module.exports = mongoose.model("Member", memberSchema, "_splurggenMembers");

所有帮助将不胜感激。谢谢。

【问题讨论】:

    标签: node.js mongodb express mongoose mongodb-query


    【解决方案1】:

    您可以使用以下代码通过 ssn 找到会员

    Member.find({ ssn: req.params.ssn}, null);
    

    如果您不想在响应中输出对象 id,请在架构模型中使用以下代码从输出响应中删除 id。

    memberSchema.set('toJSON', {
      virtuals: true,
      transform: function (doc, ret) {
        delete ret._id;
      }
    });
    

    【讨论】:

    • 我已经更新并稍微调整了我的代码以适应您的代码,但我仍然收到同样的错误。就像 Mongoose 试图将我提供给路由器的值转换为 ObjectId...
    猜你喜欢
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2020-06-21
    • 2021-12-12
    • 2016-09-13
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多