【问题标题】:Cannot Update Docuement无法更新文档
【发布时间】:2019-09-13 03:49:46
【问题描述】:

由于某种原因,我无法使用 mongoose 和 typescript 按 id 更新文档。我正在测试 api 并将 id 作为参数传入

我尝试了几种不同的按 ID 更新的方法。我可以通过比较任何其他字段来更新,但我需要通过 ID 来更新

//This is the controller

import DfrModel from './dfr.model';
import { Request, Response } from 'express';
import config from '../../config/config';
import bodyParser = require('body-parser');
import DFRActivityModel from './DFRActivity.model';
import * as mongoose from "mongoose";

export default class DfrController {

public updateOne = async (req:Request, res:Response): Promise<any> => {
    const dfr = new DfrModel(req.body);
    console.log(req.params.id);
    try {
        const updateDFRs = await DfrModel.findByIdAndUpdate( mongoose.Types.ObjectId(req.params.id),{$set:{'projectName': 'CHANGED 1234', 'projectNumber': '12345'}}); 
        //const updateDFRs = await DfrModel.findByIdAndUpdate(req.params.id,{$set:{'projectName': 'CHANGED 1234', 'projectNumber': '12345'}}); //Does not work either

        if (updateDFRs === null || updateDFRs.nModified === 0) {
            return res.status(404).send({
                success: false,
                message: 'Error Saving DFR',
                data: null
              });
        }

        res.status(200).send({
            success: true,
            data: dfr
          });

    } catch (err) {
        res.status(500).send({
            success: false,
            message: err.toString(),
            data: null
        });
    }
}

}

// This is the model
import * as mongoose from "mongoose";
const Schema = mongoose.Schema;

const DFRSchema = Schema ({
    _id: {
        type: String,
    },
    projectName: {
        type: String,
        required: true,
        trim: true
    },
    projectNumber: {
        type: String,
        required:false,
        trim: true
    }
};
export default mongoose.model("DFR", DFRSchema);

我希望文档记录更新到我定义的字段。

【问题讨论】:

  • id 是 _id findByIdAndUpdate( { _id: mongoose.Types.ObjectId(req.params.id) }
  • 是的,我可以传入 id,我不需要 'mongoose.Types.ObjectId'

标签: typescript express mongoose


【解决方案1】:

最后,我想使用表单数据(基于模型)并更新文档并获取最新的文档,我做到了:

const updateDFRs = await DfrModel.findByIdAndUpdate({_id: req.params.id},  req.body, {new: true});

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多