我正在尝试通过PUT请求更新嵌套文档的值。它适用于文档中的值,但不适用于子文档中的值。
const AnotherSchema = new Schema ({
Name: String,
Age: Number,
Appearance: {
Hair: String, Eyes: String, Height: Number};
我的路线是这样
router.put("/looks/:id/edit", function(req, res) {
var Name= "blob";
var Hair= "blue";
AnotherSchema.findByIdAndUpdate(req.params.id, {Name, Hair}, function(err, feedback){
if (err){
res.send("error");
} else {
res.redirect("/looks");
}
});
});
此路线可用于更新名称,但不能用于更新头发。我已经尝试过Appearance.Hair
,但是这在控制台中引发了错误,因为意外的.
我也已经尝试过[]
,()
和{}
,但是这些都不是做到这一点," "
也没有,这个问题似乎没有出现在文档中。
答案 0 :(得分:0)
您应该使用$set
运算符,否则您将整个记录替换为作为参数提供的对象。
var updateObj = {
{ $set: { Name: "blob", Appearance: { Hair: "blue" } } }
};
AnotherSchema.findByIdAndUpdate(req.params.id, updateObj, function (err, feedback) { ... });
答案 1 :(得分:0)
您应该通过对象符号提供要更新的道具的路径:
router.put("/looks/:id/edit", function(req, res) {
AnotherSchema.findByIdAndUpdate(req.params.id, {
Name: "blob",
Appearance: {
Hair: "blue"
}
}, function(err, feedback) {
if (err) {
res.send("error");
} else {
res.redirect("/looks");
}
});
});
以上findByIdAndUpdate
等同于:
{ $set: { Name: "blob", Appearance: { Hair: "blue" } } }
https://codesandbox.io/s/mz2z13w88p