【问题标题】:Mongoose save function not saving modifications [duplicate]猫鼬保存功能不保存修改[重复]
【发布时间】:2015-09-25 09:11:49
【问题描述】:

我正在尝试在 Mongoose 中修改文档,但更改似乎没有保存。函数本身肯定是被调用的,每次都报错。记录在 ID 推送到数组之前和之后所做的更改表明它已添加,但没有保存。

function(req, res) {
  var id = req.user._id;
  Moment.findOne({ _id: req.body.moment._id }, function (err, moment) {
    moment.comments[req.body.index].likes.push(id);
    moment.save(function(err) {
      console.log('saved');
      if (err) console.log(err);
        res.json(moment);
      });
    }
  })
};

架构

var MomentSchema = new Schema({
  name: {
    type: String,
    trim: true,
    default: '',
    required: true
  },
  username: {
    type: String,
    required: true
  },
  startTime: {
    type: Date,
    trim: true,
    required: true
  },
  endTime: {
    type: Date,
    trim: true,
    required: true
  },
  comments: {
    type: Array
  }
});

【问题讨论】:

  • 此代码无法单独运行...
  • 您是否尝试过保存完成后的比较时刻?例如moment.save(function (err, newdoc) { console.log(newdoc.toObject() }) 看看保存后的样子?它可能会保存它但忽略你的添加,因为你的架构太严格了

标签: node.js mongodb mongoose


【解决方案1】:

您的查询是错误的。您必须从给定的 id 创建一个 Mongo ObjectId。试试

var ObjectId = require('mongoose').Types.ObjectId;

Moment.findOne({_id: new ObjectId(req.body.moment._id)}, function(err, moment) ....

在您的查询中,MongoDB 没有找到与您的查询匹配的文档。这不会引发错误,但您会收到一个空对象。

【讨论】:

  • 根据 op 查询工作。他说他在推送到数组之前和之后都会检查,所以他一定是在取回一个对象。
  • 查询正确。正如@chriskelly 所说,我能够得到预期的对象。唯一不起作用的是最终保存功能。
猜你喜欢
  • 2015-12-11
  • 2021-03-10
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 2016-07-30
  • 2017-09-20
  • 2017-12-05
  • 2015-11-16
相关资源
最近更新 更多