{ Task.findById(req.params.id, (err, task) =-6ren">
gpt4 book ai didi

node.js - Model.find({_id :req. body.id}) 找到该对象,但 Model.updateOne({_id :req. body.id},{//update}) 未找到该对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:48 27 4
gpt4 key购买 nike

app.post("/admin/editAssignedTask/:id", (req, res) => {
Task.findById(req.params.id, (err, task) => {
task.title = req.body.title;
task.priority = req.body.priority;
task.date = new Date(req.body.date);
task.description = req.body.description;
if (req.body.assignTo) {
console.log(req.body.assignTo);
if (typeof req.body.assignTo == "string") {
task.assignedTo = [...task.assignedTo, req.body.assignTo];
Staff.find({ _id: req.body.assignTo }, (err, staff) => {
console.log(staff);
});
Staff.updateOne(
{ _id: req.body.assignTo },
{ $set: { $push: { todo: req.params.id } } },
(err, up) => {
console.log(up);
}
);

在上面的代码中,staff.find() 返回

 [ { todo: [ 5cc44b02abde080691893e41, 5cc46186db0195071f117808 ],
completed: [],
_id: 5cc34724ab9d2d231642f925,
name: 'gokul',
mailId: 'gokul',
__v: 12 } ]

但是 Staff.updateOne() 返回{ 确定:0,n:0,n修改:0 }这里 n 是 0,这意味着没有对象匹配。!为什么会出现这种情况?

下面是员工架构

var userSchema = new mongoose.Schema({
name: String,
mailId: String,
todo: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Task"
}
],
completed: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Task"
}
]
});

enter image description here

最佳答案

改变

Staff.updateOne(
{ _id: req.body.assignTo },
{ $set: { $push: { todo: req.params.id } } },
(err, up) => {
console.log(up);
}
);

Staff.updateMany(
{ _id: { $in: req.body.assignTo } },
{ $push: { todo: mongoose.Types.ObjectId(req.params.id) } },
(err, up) => {
console.log(up);
}
);

1) 不要使用 $set 来插入或拉出数组元素。

2) 由于在模式中,属性“todo”是一个 objectID 数组而不是字符串,因此我们需要使用 mongoose.Types.ObjectId() 显式地将字符串转换为 objectID

关于node.js - Model.find({_id :req. body.id}) 找到该对象,但 Model.updateOne({_id :req. body.id},{//update}) 未找到该对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com