updateOne 不会更新多个字段,也不会在记录中创建新字段
updateOne does not update multiple fields and does not create new fields in a record
我正在为 saving/updating 用户配置文件使用 NodeJs 和 MongoDB atlas。但是,updateOne
方法不更新多个字段,我不知道为什么!它只适用于一个变量而不适用于整个记录!这是我的代码:
app.post("/edit-profile", async (req, res) => {
if(req.body.password || req.body.phoneNumber){
res.status(401);
res.send({"error": "this api is not for changing password or phoneNumber"})
} else {
console.log("let's update this user: id="+req.body.id)
console.log(req.body)
result = User.updateOne(
{ _id: ObjectId(req.body.id)},
req.body,
(error, result) => {
if (error) {
console.log(error);
res.status(400);
res.send();
} else {
if (result.n > 0) {
console.log("result")
console.log(result)
res.header({ sessionToken: "testToken" });
res.send(req.body);
} else {
console.log("there is no user with this id")
res.status(404);
res.send({"message":"There is no user with this id!"});
}
}
}
);
}
});
例如,每当我拥有它时,它都适用于
{
"id":"6253024ca9a2fb3a9a8d3675",
"weight":888
}
但不适用于
{
"id":"6253024ca9a2fb3a9a8d3675",
"height":999
}
仅适用于 weight
参数,不会创建新字段 (height
)。即使我同时使用了多个字段,也得到了相同的结果。
此外,我还有另一个 API 用于更新膳食项目,它具有相似的结构并且可以正常工作。这是我的代码 API:
app.post("/edit-meals", async (req, res) => {
const { error } = mealSchema.validate(req.body);
if (error) {
res.status(400); // 400 bad request
res.send(error.details[0].message);
} else {
const meal = await Meal.findOne({ title: req.body.title });
if (meal) {
Meal.updateOne({ title: req.body.title }, req.body, (err, result) => {
if (err) {
res.status(403);
res.send;
} else {
res.send(req.body);
}
});
} else {
res.status(404);
res.send();
}
}
});
虽然 updateOne
在 edit meals
中有效,但在 edit user
中无效。如果有人能帮助我解决这个问题,我将不胜感激。
app.post("/edit-meals", async (req, res) => {
const { error } = mealSchema.validate(req.body);
if (error) {
res.status(400); // 400 bad request
res.send(error.details[0].message);
} else {
const meal = await Meal.findOne({ title: req.body.title });
if (meal) {
Meal.updateOne({ title: req.body.title }, {{$set:{field: value}}}, (err, result) => {
if (err) {
res.status(403);
res.send;
} else {
res.send(req.body);
}
});
} else {
res.status(404);
res.send();
}
}
});
试试这个{字段:值}
检查您的 User
模型是否定义了所有字段。 Mongoose 将忽略模型中不存在的所有属性。
因此,检查 User
架构并查看是否定义了 height
字段。
使用 updateMany 更新 mongoDb 中的多个文档。
updateMany({data})
要在 mongodb 文档中添加新字段,请使用
updateMany({_id: ObjectId(req.body.id)},{$set:{key:value}})
我正在为 saving/updating 用户配置文件使用 NodeJs 和 MongoDB atlas。但是,updateOne
方法不更新多个字段,我不知道为什么!它只适用于一个变量而不适用于整个记录!这是我的代码:
app.post("/edit-profile", async (req, res) => {
if(req.body.password || req.body.phoneNumber){
res.status(401);
res.send({"error": "this api is not for changing password or phoneNumber"})
} else {
console.log("let's update this user: id="+req.body.id)
console.log(req.body)
result = User.updateOne(
{ _id: ObjectId(req.body.id)},
req.body,
(error, result) => {
if (error) {
console.log(error);
res.status(400);
res.send();
} else {
if (result.n > 0) {
console.log("result")
console.log(result)
res.header({ sessionToken: "testToken" });
res.send(req.body);
} else {
console.log("there is no user with this id")
res.status(404);
res.send({"message":"There is no user with this id!"});
}
}
}
);
}
});
例如,每当我拥有它时,它都适用于
{
"id":"6253024ca9a2fb3a9a8d3675",
"weight":888
}
但不适用于
{
"id":"6253024ca9a2fb3a9a8d3675",
"height":999
}
仅适用于 weight
参数,不会创建新字段 (height
)。即使我同时使用了多个字段,也得到了相同的结果。
此外,我还有另一个 API 用于更新膳食项目,它具有相似的结构并且可以正常工作。这是我的代码 API:
app.post("/edit-meals", async (req, res) => {
const { error } = mealSchema.validate(req.body);
if (error) {
res.status(400); // 400 bad request
res.send(error.details[0].message);
} else {
const meal = await Meal.findOne({ title: req.body.title });
if (meal) {
Meal.updateOne({ title: req.body.title }, req.body, (err, result) => {
if (err) {
res.status(403);
res.send;
} else {
res.send(req.body);
}
});
} else {
res.status(404);
res.send();
}
}
});
虽然 updateOne
在 edit meals
中有效,但在 edit user
中无效。如果有人能帮助我解决这个问题,我将不胜感激。
app.post("/edit-meals", async (req, res) => {
const { error } = mealSchema.validate(req.body);
if (error) {
res.status(400); // 400 bad request
res.send(error.details[0].message);
} else {
const meal = await Meal.findOne({ title: req.body.title });
if (meal) {
Meal.updateOne({ title: req.body.title }, {{$set:{field: value}}}, (err, result) => {
if (err) {
res.status(403);
res.send;
} else {
res.send(req.body);
}
});
} else {
res.status(404);
res.send();
}
}
});
试试这个{字段:值}
检查您的 User
模型是否定义了所有字段。 Mongoose 将忽略模型中不存在的所有属性。
因此,检查 User
架构并查看是否定义了 height
字段。
使用 updateMany 更新 mongoDb 中的多个文档。
updateMany({data})
要在 mongodb 文档中添加新字段,请使用
updateMany({_id: ObjectId(req.body.id)},{$set:{key:value}})