Mongoose模式对象ID类型值返回



我正试图用指向数据库中另一个集合的模式检索一个值:

_id: 61b248b0cd79df2124dcf283
name: "david"
email: "email@gmail.com"
dogRaces: 61a22138fdb728445ef9a067 (points to oid in another collection: {name: "name"})
expert: 61a2255b0f5aeabad0e3785b (points to oid in another collection: {name: "name"})
location: 61b248b0cd79df2124dcf282 (points to oid in another collection: {name: "name"})

在前端,当我检索信息时,值显示为oid,而不是文档中的名称。

如何使用nodejs正确检索信息?

这是我的猫鼬模式:

const mongoose = require('mongoose')
const trainerSchema = new mongoose.Schema({
name: {
type:String,
required: true,
},
email: {
type:String,
required:true,
},
registrationDate: {
type:Date,
default: Date.now,
},
dogRaces: {
type:mongoose.Types.ObjectId, ref:"DogRace"
},
expert: {
type:mongoose.Types.ObjectId, ref:"Expert"
},
location: {
type:mongoose.Types.ObjectId, ref:"City"
},
})
module.exports = mongoose.model('Trainer', trainerSchema);

我的njs代码:

async function getTrainer(req,res,next) {
let trainer
try {
trainer = await Trainer.findById(req.params.id)
.populate('dogRaces')
.populate('expert')
.populate('location');
if (trainer == null) {
return res.status(404).json({message: 'Cannot find trainer'});
}
} 
catch(err) {
return res.status(500).json({message: err.message});
}

谢谢!

使用猫鼬,这通过.populate((非常简单。因此,在您的情况下,它看起来像:

const trainer = await Trainer.findOne({...})
.populate('dogRaces')
.populate('expert')
.populate('location');

编辑trainerSchema,如:

const mongoose = require('mongoose')
const DogRace = require('../yourentitypath/DogRace')
const Expert = require('../yourentitypath/Expert')
const City = require('../yourentitypath/City')
const trainerSchema = new mongoose.Schema({
name: {
type:String,
required: true,
},
email: {
type:String,
required:true,
},
registrationDate: {
type:Date,
default: Date.now,
},
dogRaces: {
type:mongoose.Schema.Types.ObjectId, ref:"DogRace"
},
expert: {
type:mongoose.Schema.Types.ObjectId, ref:"Expert"
},
location: {
type:mongoose.Schema.Types.ObjectId, ref:"City"
},
})
module.exports = mongoose.model('Trainer', trainerSchema);

最新更新