![](/img/trans.png)
[英]What is a better way to prevent document from deleting if a reference is present in another document in Mongodb via Mongoose?
[英]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.