繁体   English   中英

猫鼬/ mongodb-另一个文档的参考值

[英]mongoose / mongodb - reference value from another document

进行中的学习-坚持研究如何在不同的馆藏中必须拥有2个独立的文档: 事件事件评论

我可以在这两者之间引用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
     }
})

您提到要“创建时”执行此操作。

请记住,在MongoDB中, 写操作仅在单个文档级别是原子的 因此,没有“内置”方式来保证您创建的每个事件文档都会有一个对应的事件查看文档(我假设这就是您要尝试的操作。)

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

我的建议是尝试在查询事件查看文档时以一种可以使用猫鼬的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
        })
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM