如何只更新mongoose中的一个属性

时间:2018-02-05 16:21:38

标签: javascript node.js mongodb mongoose

我正在使用下面的mongoose版本4.1.8我的mongo db架构看起来像这样

(function() {
  'use strict';

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

  const DataCodeSchema = new Schema({

    label: {
      type: String,
      required: true,
      maxLength: 60
    },
    description: {
      type: String,
      required: false,
      maxLength: 255
    },

    enabled: {
      type: Boolean,
      required: true,
      default: true
    },


    items:{
      type:Array,
      required:false
    }
  });





  module.exports = mongoose.model('DataCode', DiscountCodeSchema);
})();

现在补丁电话给我这样的数据

{'items':"dataNth"}

我现有的数据是这样的

{ 'label':'data info',
'items':['data1','data2']
}
补丁调用后,它变得像他的

{ 'label':'data info',
    'items':['dataNth']
    }

但我想要这样

{ 'label':'data info',
    'items':['data1','data2','dataNth']
    }

我已经像这样使用了mangoose findByIdAndUpdate

const options = {
      new: true
    };

    if (req.body.code) {
      req.body.code = req.body.code.toLowerCase();
    }

    DataCode.findByIdAndUpdate(req.params.dataId, req.body, options)
      .then(dataCode => {
        if (!dataCode) {
          return errorHandler.notFound(req, res, `No data found for id: ${req.params.dataId}`);
        }

        res.status(201).json(dataCode);
      })
      .then(null, next);

请告诉我如何操作

1 个答案:

答案 0 :(得分:0)

$push用于更新数组。

DataCode.findByIdAndUpdate(
   {_id: req.params.dataId},
   { $push: {items: 'dataNth'},
   options
)

你也可以使用$ set来编辑其他文件

DataCode.findByIdAndUpdate(
       {_id: req.params.dataId},
       {$push: {items: 'dataNth'},
       {$set: req.body}
       options
    )