首页 > 解决方案 > 猫鼬当我使用更新时,它不会更新状态为 200(成功)的任何内容

问题描述

我使用更新查询在 Mongodb 的数组中推送一些数据,我在 nodeJs 中使用猫鼬。请任何人都可以帮助解决这个问题。

模型架构:

var mongoose = require('mongoose')
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt')

var schema = new Schema({
    email: { type: String, require: true },
    username: { type: String, require: true },
    password: { type: String, require: true },
    creation_dt: { type: String, require: true },
    tasks : []
});

module.exports = mongoose.model('User',schema)

所以我使用这个模式,我想在任务数组中推送数据,这是我用于推送数据的路由代码。

任务中更新数据的路线:

router.post("/newTask", isValidUser, (req, res) => {
  addToDataBase(req, res);
});

async function addToDataBase(req, res) {
  var dataa = {
    pName: req.body.pName,
    pTitle: req.body.pTitle,
    pStartTime: req.body.pStartTime,
    pEndTime: req.body.pEndTime,
    pSessionTime: req.body.pSessionTime,
  };
  var usr = new User(req.user);
  usr.update({ email: req.user.email }, { $push: { tasks: dataa } });
  console.log(req.user.email);
  try {
    doc = await usr.save();
    return res.status(201).json(doc);
  } catch (err) {
    return res.status(501).json(err);
  }
}

在这里,我创建了一个异步函数并在路由中调用该函数,但是当我使用邮递员发布数据时,它会以状态码 200(成功)响应,但它不会更新我的数据库中的任何内容。

输出截图:

输出 正如您在此图像任务中看到的那样:[].. 它不会更新该数组中的任何内容,但状态为成功我不知道为什么会发生这种情况。

标签: mongodbexpressmongoose

解决方案


自从我做猫鼬以来已经有一段时间了,但我很确定我<model>.update()也在积极更新 Mongo 的记录。

.update()当您想更新 Mongo 中的现有记录时使用,但您正在实例化一个新模型User(即创建一个新用户)

为新用户尝试以下代码:


router.post('/newTask', isValidUser, (req, res) => {

  addToDataBase(req,res)

})
async function addToDataBase(req, res) {

  var dataa = {
    pName: req.body.pName,
    pTitle: req.body.pTitle,
    pStartTime: req.body.pStartTime,
    pEndTime: req.body.pEndTime,
    pSessionTime: req.body.pSessionTime
  }

  // email field is already in `req.user` 
  var usr = new User({ ...req.user, tasks: [dataa] });

  console.log(req.user.email);
  try {
    await usr.save();
    return res.status(201).json(doc);
  }
  catch (err) {
    return res.status(501).json(err);
  }

}

现在,如果您想更新现有记录:


router.post('/newTask', isValidUser, (req, res) => {

  addToDataBase(req,res)

})
async function addToDataBase(req, res) {

  var dataa = {
    pName: req.body.pName,
    pTitle: req.body.pTitle,
    pStartTime: req.body.pStartTime,
    pEndTime: req.body.pEndTime,
    pSessionTime: req.body.pSessionTime
  }


  try {
    await usr. updateOne({ email : req.user.email}, { $push: { tasks: dataa } });
    return res.status(201).json(doc);
  }
  catch (err) {
    return res.status(501).json(err);
  }

}

欲了解更多信息,请阅读:https ://mongoosejs.com/docs/documents.html


推荐阅读