在MongoDB中引用多个集合

时间:2016-06-22 20:44:49

标签: mongodb mongoose

我的数据库中有三个集合:应用,评论和用户。

应用会有多个评论,评论会有一个用户,用户会有多个评论。

我确实需要他们都绑在一起,我正在努力。我已经能够将评论附加到用户(反之亦然),但我无法将评论附加到应用程序。我认为这个动作需要在POST到数据库进行审查。

我确实需要appId(并且它已存储在评论正文中),但我无法正确识别和更新数据库中的正确集合(应用程序)。我似乎在围绕这个旋转自己。

基本上,我需要参考审核所针对的应用程序以及审核发布时审核的用户。我确实拥有所有型号"正确"引用其他集合(当您使用消息和用户组件演示时)。

有人能指出我正确的方向吗?这是我到目前为止的POST代码。

// SAVE A REVIEW TO DATABASE
router.post('/', function(req, res, next) {
var decoded = jwt.decode(req.query.token);
User.findById(decoded.user._id, function(err, doc) {
    if (err) {
        return res.status(404).json({
            title: 'An error occurred',
            error: err
        });
    }
    var review = new Review({
        content: req.body.content,
        rating: req.body.rating,
        app: req.body.appId,
        user: doc
    })
Application.findById(req.body.appId, function(err, doc) {
    if (err) {
        return res.status(404).json({
            title: 'An error occurred',
            error: err
        });
    }
    review.save(function(err, result) {
        if (err) {
            return res.status(404).json({
                title: 'An error occurred',
                error: err
            });
        }
    review.update(function(err, result) {
        if (err) {
            return res.status(404).json({
                title: 'An error occurred',
                error: err
            });
        }
        doc.reviews.push(result);
        doc.save();
        res.status(201).json({
            message: 'Saved review',
            obj: result
        });
    });
});
});

模型:

Review Model:

var schema = new Schema({
    content: {type: String, required: true},
    rating: {type: Number},
    dateCreated: {type: String},
    app: {type: Schema.Types.ObjectId, ref: 'Application'},
    user: {type: Schema.Types.ObjectId, ref: 'User'}
});

Application Model:

var schema = new Schema({
    name: {type: String, required: true},
    description: {type: String},
    reviews: [{type: Schema.Types.ObjectId, ref: 'Review'}],
})

User Model:

var schema = new Schema({
    firstName: {type: String, required: true},
    lastName: {type: String, required: true},
    password: {type: String, required: true},
    passwordConfirm: {type: String, required: true},
    email: {type: String, required: true, unique: true},
    reviews: [{type: Schema.Types.ObjectId, ref: 'Review'}]
});

也许我对此采取了错误的方式,但我似乎很丢失。

提前谢谢大家。

0 个答案:

没有答案