【问题标题】:Nodejs Mongodb update multiple collectionsNodejs Mongodb 更新多个集合
【发布时间】:2018-07-29 15:48:09
【问题描述】:

在 mongodb 中现在有两个集合 Event 和 Packages。所以基本上模型是这样的

事件模型

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;

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

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

【问题讨论】:

  • 什么不起作用?您收到任何错误或更新未完成?
  • 不确定 Mongoose 是否支持findAndModify,我知道它通过助手findOneAndUpdatefindByIdAndUpdate 支持这一点。也许您的意思是直接以Package.collection.findAndModify(...) 调用底层集合函数?
  • 您在事件包上使用增量运算符,它属于对象类型?仍然不清楚您想要做什么,但这是一个错误。使用 $set 而不是 $inc

标签: node.js mongodb express mongoose


【解决方案1】:

你可以试试这个,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2020-05-13
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多