【发布时间】: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 是
_idfindByIdAndUpdate( { _id: mongoose.Types.ObjectId(req.params.id) } -
是的,我可以传入 id,我不需要 'mongoose.Types.ObjectId'
标签: typescript express mongoose