node.js - Nodejs Mongodb更新多个集合

标签 node.js mongodb express mongoose

在 mongodb 中,现在有两个集合:事件和包。所以基本上模型看起来像这样

事件模型

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

封装模型如下所示

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

这里我尝试更新一个事件,因此当事件更新时,包也会更新。所以在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;

但它根本不起作用。如果我删除包更新的代码,它将适用于事件。

有人可以告诉我如何进行这项工作,以便我可以一次更新多个集合。

最佳答案

你可以试试这个,

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

关于node.js - Nodejs Mongodb更新多个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48865663/

相关文章:

node.js - Webpack-dev-server 和同构的 React-node 应用程序

node.js - Node.js 中的 "connect EMFILE"错误

python - 使用pymongo连接到aws时出现ServerSelectionTimeoutError

javascript - 在回调中发送电子邮件时 Nodemailer 不工作

json - Javascript从node/express服务器读取gz文件

node.js - 尝试使用 Mongoose 从另一个字段的查找中返回 1 个字段

node.js child_process 生成忽略等号

mongodb - 如何使用Docker使用单个mongodb运行多个应用程序

java - 具有 ElasticSearch Reactive Streams 的 Spring Boot 应用程序的架构

node.js - 如何使 Mongoose 连接在全局范围内可用