简体   繁体   English

Nodejs Mongodb更新多个集合

[英]Nodejs Mongodb update multiple collections

In mongodb have two collections for now Event and Packages. 在mongodb中,现在有两个集合Event和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 所以在nodejs中,我已经做到了

    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. 有人可以告诉我如何进行这项工作,以便一次更新多个集合。

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);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM