【问题标题】:how to append document and update key如何附加文档和更新密钥
【发布时间】:2019-10-26 03:55:30
【问题描述】:

我正在尝试实现用于记录更新的版本控制类型数据库。我正在使用猫鼬来完成繁重的工作。我的模型如下所示:

    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”代表文档的修订版本。我的目标是在 put 发生后增加 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"
  }
}

【问题讨论】:

  • 您最好将修订设为文档数组,然后使用$push 追加新修订。

标签: node.js rest api express mongoose


【解决方案1】:

如果您将架构修改为这样,您可以大大简化您的生活:

const VenueSchema = new Schema({
    _id: String,
    revisions: [{
        //... your props
    }]
});

这样,数组的index 就是你的keyarray length 就是你的num_revisions

对于您的其他想法,您应该查看mongoose middleware,特别是prepost 挂钩。它们基本上是为您想要达到的目标而设计的。它们在模型上的saveupdate 等之前和之后触发事件。

【讨论】:

  • 谢谢Akrion。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2021-02-23
  • 2014-08-28
  • 2021-10-31
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多