Получение данных из полей, отличных от ObjectId, из MongoDb с использованием сервера NodeJS Express - PullRequest
0 голосов
/ 08 мая 2020

Я хочу использовать 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");

Любая помощь приветствуется. Спасибо.

1 Ответ

0 голосов
/ 08 мая 2020

Вы можете найти член по ssn, используя следующий код

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

, и если вы не хотите выводить идентификатор объекта в своем ответе, используйте следующий код в своей модели схемы, чтобы удалить идентификатор из выходного ответа.

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