我有3个架构。我在节点js中的api是根据调查表matchedUsers获取用户数据。我成功地填充了匹配的用户数据。但是,如果ratingById是matchedusers Id,我也想在结果中添加评级架构中的评级。
const RatingSchema = new mongoose.Schema({
ratingDate: {
type: Date,
required: true
},
ratedById: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true
},
ratingOfId: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
rating: {
type: Number
},
ratingComments: {
type: String
},
});
const QuestionnaireSchema = new mongoose.Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
matchedUsers: {
type: [mongoose.Schema.Types.ObjectId],
ref: "User"
}
});
const UserSchema = new mongoose.Schema({
type: {
type: String
},
firstName: {
type: String,
required: true
},
lastName: {
type: String,
required: true
},
username: {
type: String,
required: true
}
});
请帮助我如何将评分数据添加到查询中。我的代码是-
router.get("/:id/matches", (req, res, next) => {
Questionnaires.findById(req.query.questionnaireId)
.populate({ path: "matchedUsers", model: "User" })
.exec()
.then(questionnaire =>
res.json({ success: true, matches: questionnaire.matchedUsers })
)
.catch(err => {
console.log(err);
return res.json({ success: false, message: "Could not get matches." });
});
});
答案 0 :(得分:0)
您必须在查询中使用aggregate
,并使用$lookup
从另一个架构获取引用
首先,我们从User
模式中获得用户的引用,然后为Rating
模式中的每个user
获得Rating
的引用
Questionnaires.aggregate([
{
$match:{
_id:req.query.questionnaireId
}
},{
$lookup:{
from:'users',
localField:'matchedUsers',
foreignField:'_id',
as:'user'
}
},{
$unwind:{
path:'$user',
preserveNullAndEmptyArrays:true
}
},{
$lookup:{
from:'ratings',
localField:'user._id',
foreignField:'ratingById',
as:'rating'
}
},{
$unwind:{
path:'$rating',
preserveNullAndEmptyArrays:true
}
}
]);