node.js - 想使用猫鼬 updateOne 但它没有更新
问题描述
我想更新类型:报告类型:在reportStatus下挂起,但是当我在邮递员上尝试时,我不断得到
n:1 ,n:modified:1 和 ok:1
report: [
{
category: {
type: mongoose.Schema.Types.ObjectId,
ref: "CrimeCategory",
required: true,
},
location: {
type: mongoose.Schema.Types.ObjectId,
ref: "Location",
required: true,
},
reportText: {
type: String,
required: true,
},
reportStatus: {
type: mongoose.Schema.Types.Mixed,
default: function () {
return [
{ type: "reported", date: new Date(), isCompleted: true },
{ type: "pending", isCompleted: false },
{ type: "investigating", isCompleted: false },
{ type: "solved", isCompleted: false },
];
},
},
},
],
这是我试图更新模型中类型的控制器,我做错了什么?
const crimeReport = require("../../model/crimereport");
exports.updateReport = (req, res) => {
crimeReport
.updateOne(
{ _id: req.body.reportId, "report.reportStatus": req.body.type },
{
$set: {
"report.reportStatus.$": [
{
type: req.body.type,
date: new Date(),
isCompleted: true,
},
],
},
}
)
.exec((error, report) => {
if (error) return res.status(400).json({ error });
if (report) {
res.status(200).json({ report });
}
});
};
邮递员发帖请求:
{
"reportId": "607b2b25876fa73ec4437440",
"type":"pending"
}
这是邮递员的帖子结果:
{
"report": {
"n": 0,
"nModified": 0,
"ok": 1
}
}
解决方案
看起来,reportId
当 Mongodb 文档的 id 类型为 时,您将 post 请求的正文作为字符串发送ObjectId
。在查询 Mongodb 之前,您需要将 reportId 类型转换为 ObjectId。由于您使用的是 Mongoose,因此应该这样做:
mongoose.Types.ObjectId(req.body.reportId)
推荐阅读
- arrays - 从被调用函数返回数组到父子程序
- ios - 在 iOS Swift 上从网络加载 MVVM 异步 UIImage
- spring-boot - 订阅了反应式管道,但在单元测试中 Mockito.verify() 失败(没有记录模拟调用)
- angular - Angular CLI 在容器内运行时未检测到更改
- react-native - Aws-amplify 不适用于 react-native 和 expo 版本 36.0.0
- visual-studio-code - Visual Studio Code Zip 文件编辑
- python - 如果另一列中有共同匹配,则拆分名字和姓氏
- php - Xampp 中的端口有问题
- c# - Blazor WebAssembly 与 AzureAD
- java - 如何直接调用 Java Arraylist 以打印到 txt 文件?