【问题标题】:Cannot Populate Mongodb with new req.body.xxxx data无法使用新的 req.body.xxxx 数据填充 Mongodb
【发布时间】:2018-06-13 16:07:07
【问题描述】:

我一直在尝试使用添加的 req.body.whatever 数据更新 MongoDB。

当我将 req.body 数据获取到我的路线时,我可以看到它,更改它并更新到数据库就好了,但是当我在 req.body 中添加一个新元素时,如下所示:

req.body.newData = "this is new";

在路由中,它不会使用数据库文档中已经存在的其余现有(可更改)req.body 数据填充到 MongoDB 中。 我可以在代码中更改现有的 req.body.(KeyElement),并更新到数据库。一旦我尝试向 req.body 添加一个元素,新元素就不会更新。尝试了所有不同的更新、修改、replaceOne 等,可以获得可编辑的结果,但仍然没有新元素被添加到数据库中。我什至尝试了

Model.update(query, {$set: req.body});   etc

这似乎也更新了,但没有添加任何新内容。

这是我正在使用的路线...

router.post('/set-repair-info', ensureAuthenticatedAdmin, function(req, res) {
  console.log('set-repair-info : ');
  var ObjectId = require('mongodb').ObjectID;
  var b = req.body;
  console.log('body: ');
  console.log(req.body);
  var repairToUpdate = req.body.jid;
  // console.log(repairToUpdate);
  // console.log('req.body[uid]');
  // console.log(req.body.jid);
  // console.log('userid::: ' + req.body.userid);
  // console.log('backuped :   ' + req.body.backedup);
  // console.log(req.body.username);

  //buggy without this;
  if (req.body.backedup=='false'){
    req.body.backedup == '';
  }

  //CHECKS AND RESPONSES:
  //by Edit
  //PARTS ORDERED
  if(req.body.repairstatus == 'Parts Ordered'){
    req.body.partsordered = 'true';    //THIS WILL NOT GO INTO DB!
  } else{
    req.body.partsordered = null;
  }

  req.body.testthisout = "THIS IS A TEST";  //THIS WILL NOT GO INTO DB!
  console.log("parts: " + req.body.partsordered);

  // Job.replaceOne({ _id: ObjectId(req.body.jid)}, req.body , {upsert: true}, function (err, result) {
  //     (err === null) ? {msg: 'something happened... err edit user'} : {msg: err}
  // });
  console.log('body updated: ');
  console.log(req.body);
  req.body.repairstatus = "Waiting For Something Else";  // UPDATES FINE

  Job.update({ _id: ObjectId(req.body.jid)}, { $set: req.body },  function (err, result) {
      (err === null) ? {msg: 'something happened... err edit user'} : {msg: err}
  });

  req.flash('success_msg','Repair has successfully been edited and saved to the database.');
  res.render('edit-repair', { job: {'data': req.body} });

});

【问题讨论】:

  • 我必须注意,“这不更新”注释行是路由中创建的元素,并且在调用路由时不会传递。它们在路由中更新,可以在 req.body 的 console.log 中看到。我还检查了持有它的 Model.js Schema 并确保元素在那里。我可能需要重新创建!现在将对其进行测试并报告。
  • 还是一样的结果。
  • 您可以尝试关闭strict模式一段时间,看看是不是模型问题。
  • Mongoose Schema 中是否存在新字段?
  • 现在工作。不在架构中,并且最后一次尝试添加和检查据说没有进入保存的文件。已保存,现在按预期工作。

标签: javascript node.js mongodb express mongoose


【解决方案1】:

仔细检查您的模型架构并确保在那里设置了变量。 检查创建 Schema 实例的路由,确保值在那里。和 .save() 或通过猫鼬方法更新。 保存文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2017-05-05
    • 1970-01-01
    • 2020-11-20
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多