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

mongoose / mongodb - reference value from another document

正在学习 - 一直在研究如何在不同的集合中拥有 2 个单独的文档:events & event reviews

我可以在两者之间引用 objectId,但是如果我想将来自 事件 的信息填充到 活动回顾 创建时?几个小时以来,我一直在尝试 google 答案,但到目前为止,我发现的每种方法都没有成功。不是在寻找具体的答案,而是希望有更多知识的人为我指明正确的方向。

您需要明确声明事件评论架构中的字段引用事件集合中文档的 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
     }
})

你提到你想这样做 "as it's created."

请记住,在 MongoDB 中,写入操作仅在单个文档级别是原子的。所以没有 "built in" 方法可以保证您创建的每个事件文档都有相应的事件审查文档(我假设这就是您正在尝试做的。)

您将需要保存一个活动文档,获取该文档的 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
        })
    }
}