Nodejs Mongodb update multiple collections

余生长醉 提交于 2020-01-05 04:15:16

问题


In mongodb have two collections for now Event and Packages. So basically the model looks like this

Event Model

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const Schema = mongoose.Schema;

const bcrypt = require('bcrypt-nodejs');

const EventSchema = new Schema({
  _id: mongoose.Schema.Types.ObjectId,
  eventname: {
    type: String,
    required : true,
  },
  eventdesc: {
    type: String,
    required : true,
  },
  createdAt: {
    type: Date,
    default: Date.now
  },
  updatedAt: {
    type: Date,
    default: Date.now
  }
});

module.exports = mongoose.model('Event', EventSchema);

Package Model looks like this

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const Schema = mongoose.Schema;

const bcrypt = require('bcrypt-nodejs');

const PackageSchema = new Schema({
  _id: mongoose.Schema.Types.ObjectId,
  eventpackages: {
    type: Object,
    required : false,
  },
  event: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Event'
  },
  createdAt: {
    type: Date,
    default: Date.now
  },
  updatedAt: {
    type: Date,
    default: Date.now
  }
});

module.exports = mongoose.model('Package', PackageSchema);

Here I am trying to update an event so when the event will be updated the packages will be updated also. So in nodejs I have done like this

    var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');


/* UPDATE EVENT */
router.put('/:id', function(req, res, next) {
  upload(req, res, function(err) {
    let EventData = {
      eventname       : req.body.eventname,
      eventdesc       : req.body.eventdesc, 
    }

    let EventPackages = {
      eventpackages : req.body.sections,
    }
    Event.findByIdAndUpdate(req.params.id, EventData, function (err, post) {
      if (err) return next(err);

      Package.findAndModify({
        query: { event: req.params.id },
        update: { $inc: { EventPackages } },
        new: true, 
        upsert: true 
      })
        res.json(post);
    });
  });
});



module.exports = router;

But its not working at all. If I will deleted the codes for package update it will work for events.

So can someone tell me how to make this work so that I can update multiple collections at a time.


回答1:


you can try this,

    var query = {
              'event': req.params.id
              };
    var dataToUpdate = {
       $set: {
          ///
       }
};
Package.updateMany(query, datatoUpdate, function(err, result) {
       if (err) return handleError(err);

       return Promise.resolve(result);
});


来源:https://stackoverflow.com/questions/48865663/nodejs-mongodb-update-multiple-collections

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!