我正在尝试实现用于记录更新的版本控制类型数据库。我用猫鼬做繁重的工作。我的模型如下所示:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const VenueSchema = new Schema({
_id: String,
num_revisions: {type: Number, default: 0},
"1": {
avp_prio: Number,
prio_cat: String,
mkt_prio: Number,
comp_pos: String,
pvc_driver: Number,
pvc_desc: String
}
});
const Venue = mongoose.model('venue', VenueSchema);
module.exports = Venue;
num_revisions将代表已经进行了多少次修订。键“ 1”代表文档的修订版本。我的目标是在发生放置后增加num_revisions并将res.body附加到原始文档中,并将密钥与num_revisions值匹配,以便我确切地知道最新的文档。
到目前为止,这是我的PUT方法。我可以使用num_revisions罚款,但是我不确定如何附加req.body并为其更新密钥。
/* PUT update docuement with new revision. */
router.put('/:id', (req, res, next) => {
console.log(req.body);
Venue.findOneAndUpdate({ _id: req.params.id }, { $inc: { num_revisions: 1 },key: 2}, {new: true}).then(function (venue) {
res.send(venue);
});
});
非常感谢您的帮助!
我正在尝试完成以下操作:
{
"_id": "testvenue",
"__v": 0,
"num_revisions": 2,
"1": {
"avp_prio": 1,
"prio_cat": "text",
"mkt_prio": 1,
"comp_pos": "test",
"pvc_driver": 1,
"pvc_desc": "test"
},
"2": {
"avp_prio": 3,
"prio_cat": "update",
"mkt_prio": 1,
"comp_pos": "test",
"pvc_driver": 1,
"pvc_desc": "test"
}
}
答案 0 :(得分:1)
如果将架构修改为以下内容,则可以大大简化生活:
const VenueSchema = new Schema({
_id: String,
revisions: [{
//... your props
}]
});
这样,数组的index
将成为您的key
,而array length
则将成为您的num_revisions
。
对于您的其余想法,您应该查看mongoose middleware,尤其是pre
和post
钩子。它们基本上是为您要达到的目的而设计的。它们在模型上save
,update
等之前和之后触发事件。