mongoose / mongodb - 来自另一个文档的参考值

时间:2015-04-12 04:59:07

标签: node.js mongodb mongoose

正在学习 - 想知道如何在不同的馆藏中分别创建2个单独的文件:活动& 活动评论

我能够在两者之间引用objectId,但如果我想填充事件中的信息进入事件审核,因为它已创建?我已经尝试过几个小时的谷歌答案,但到目前为止,我发现的每种方法都没有成功。没有找到具体答案的人只需要更多知识就能指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

您需要明确声明事件审核模式中的字段引用事件集合中文档的ObjectID。像这样......

var mongoose = require('mongoose'), Schema = mongoose.Schema
var EventReviewSchema = new Schema({
   someField:{
     type: Schema.Types.ObjectId,
     ref: 'Event'   // Note this is the name of the event model, not schema
     }
})

你提到你想要“创建它”。

请记住,在MongoDB中,写操作在单个文档级别只是原子的。因此,没有“内置”方式来保证您创建的每个事件文档都有相应的事件审阅文档(我假设这是您正在尝试做的事情。)

您需要保存事件文档,获取该文档的ObjectId并使用它来填充事件审阅文档中的相应字段。但请记住,如果在第一次和第二次写操作之间发生某些错误,第二次写操作可能会失败。

我的建议是在查询事件审阅文档时尝试以可以使用mongoose FindOrCreate方法(带plugin)的方式编写应用程序。这是解决这个问题的快捷方式。

编辑:

var Review = mongoose.model('Review', EventReviewSchema)

module.exports.reviewCreate = function(req, res, next) { 
    var eventid = req.params.eventid
    if (eventid) { 
        var review = new Review() // Review model
        review.someField = eventId
        review.save(function(err){
            if(err) return next(err)
            // save successful
        })
    }
}