gpt4 book ai didi

javascript - 在两个级别上使用 Mongoose 填充

转载 作者:行者123 更新时间:2023-12-03 02:32:10 25 4
gpt4 key购买 nike

我正在制作一个电影网站来培养我的平均堆栈技能。目前我正在尝试从数据库中获取电影文档。该电影文档有一个属性 Reviews,它是一个包含对 Review 模型的引用的 ObjectId 数组。我填充了这些对象 ID,每个评论文档都具有以下结构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var schema = new Schema({
user: {type: Schema.Types.ObjectId, ref:'User'},
movie: {type: Schema.Types.ObjectId, ref:'Movie'},
date: {type: Date, default: Date.now},
content: String
}, { usePushEach: true });

module.exports = mongoose.model('Review', schema);

我已经填充了从服务器获取的电影对象的 Reviews 属性,但我想知道如何填充我获得的每个评论对象的 user 属性。因此,我不会看到 objectId,而是看到实际的用户对象。

This is what the structure of the movie object I retrieved from the server looks like

我在服务器端的路线:我填充了reviews属性,但我不知道如何填充这些review对象内的user属性

router.get('/getmovie/:id', function(req, res, next) {
var id = req.params.id;

Movie.findById(id, function(err, movie){
if (err) {
res.status(500).json({
message: "An error occurred",
obj: err
})
}
Review.populate(movie, {path: 'reviews'}, function(err, movie){
if (err) {
res.status(500).json({
message: "An error occurred",
obj: err
})
}
res.status(200).json({
Message: "success",
obj: movie
});
})
})
});

最佳答案

我认为您可以使用.populate()来简化您的代码。

Movie.findById(id).populate({
path: 'reviews',
populate: {
path: 'user'
}
}).exec(function(err, movie){
if (err) {
// make sure you add return or else the code will continue
return res.status(500).json({
message: "An error occurred",
obj: err
})
}
res.status(200).json({
Message: "success",
obj: movie
});
});

请注意,您最多只能完成 2 个级别。否则,您需要使用更复杂的 .aggregate()

关于javascript - 在两个级别上使用 Mongoose 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48691830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com