как добавить документ и обновить ключ - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь реализовать базу данных типа контроля версий для обновления записей. Я использую мангуста для тяжелой работы. Моя модель выглядит следующим образом:

    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"
  }
}

1 Ответ

1 голос
/ 12 июня 2019

Вы могли бы значительно упростить свою жизнь, если вы измените свою схему следующим образом:

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

Таким образом index массива будет вашим key, а array length будет просто вашимnum_revisions.

Для остальной части вашей идеи вы должны изучить связующее ПО mongoose и, в частности, pre и postкрючки.Они в основном предназначены для того, к чему вы пытаетесь добраться.Они запускают события до и после save, update и т. Д. На моделях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...