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
})
}
}
正在学习 - 一直在研究如何在不同的集合中拥有 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
})
}
}