我是猫鼬的新手,使用以下控制器:
const Creport = require('../models/creport.model.js');
exports.save = (req, res) => {
const creport = new Creport({
curso_id: req.body.curso_id,
nombre: req.body.nombre,
....
});
creport.save()
.then(data => {
res.send(data);
}).catch(err => {
res.status(500).send({
message: err.message
});
});
};
在creport.model.js中:
curso_id: {
type: Schema.Types.ObjectId,
ref: 'Curso'
},
这将创建一个json文件,例如:
{"curso_id":"5b5a14e8ej1a18ac0b5e5433","nombre":"el nombre",....}
在寻找时:
{"curso_id":"curso No. 1","nombre":"el nombre",....}
编辑: 使用填充:
exports.findAll = (req, res) => {
Creport.find().populate('curso_id')
.then(creports => {
res.send(creports);
}).catch(err => {
res.status(500).send({
message: err.message
});
});
};
将输出:
[{"_id":"5b5ce554967f6a36f0c84fe6","curso_id":{"_id":"5b5a14e8ej1a18ac0b5e5433","name":"curso No. 1"},"nombre":"el nombre"....}]
答案 0 :(得分:0)
您可以使用填充方法,如果您阅读猫鼬文档,将会发现有一种非常简单的申请方法。
答案 1 :(得分:0)
curso_id
是 ObjectId
。返回的json确认了这一点。
语义是正确的。
您可能应该添加一个
curso_number: {
type: Schema.Types.String
},
答案 2 :(得分:0)
要以这种格式返回数据,您需要使用 aggregate 方法。
在测试中,我创建了一个课程和一个Creport,然后执行了该汇总:
CreportModel.aggregate([
{"$match":{_id:creport._id}},
{"$lookup":{
from:"cursos",
localField:"curso_id",
foreignField:"_id",
as:"cursos"
}
},
{"$project":{"curso_id": {"$arrayElemAt":["$cursos.name",0]},"nombre": "$nombre","_id":0}}
])
.then(result=>{
console.log(result)
})
结果:
如果要在结果中添加更多字段,则需要更改 $ project 阶段。
例如
{"$project":{"curso_id": {"_id":1,"$arrayElemAt":["$cursos.name",0]},"nombre": "$nombre"}}
猫鼬文档:Aggregate Lookup