我对Mongoose比较新,我在更新子文档时遇到了doc.save()的问题。
目前我有这段代码:
Marksheet.findById(req.body.id, function(err, marksheet) {
if (err) return res.send(err);
marksheet.marks[0] = req.body.mark;
marksheet.save(function(err){
if (err) return res.send(err);
res.json(marksheet);
});
当我通过Node.js运行时,我收到此错误:
TypeError:doc.save不是函数
如果我尝试只更改一些根值,运行marksheet.save()时没有问题。此外,如果我使用findByIdAndUpdate(),它似乎工作正常。
Marksheet.findByIdAndUpdate(marksheet._id, marksheet, {new: true}, function(err, newMarksheet){
if (err) return res.send(err);
res.json(newMarksheet);
});
我的问题是为什么子文档不想保存,是否有更好的方法来运行此更新操作而不是替换整个文档?
答案 0 :(得分:0)
在创建Model的新对象和使用findOne()方法时,可以使用.save()方法。你可以看到下面的例子:
Chat.findOne({idChatGroup : idChatGroup}, function(err,chat){
if(err){
res.json({
status : "not_ok",
result : "Error Query"
})
}else{
if(chat){
var chatSave = new Chat({
idChatGroup : idChatGroup,
children : [{
uidUser : uidUser,
gcmID : gcmID
}]
});
chatSave.save(function (err,result){
if(err){
res.json({
status : "not_ok",
result : "Error Saving user"
});
}else{
res.json({
status : "ok",
result : "user add to group"
});
}
});
}else{
chat.children.push({
uidUser : uidUser,
gcmID : gcmID
});
chat.save(function (err,result){
if(err){
res.json({
status : "not_ok",
result : "Error Saving user"
});
}else{
res.json({
status : "ok",
result : "user add to group"
});
}
});
}
}
因此,当您尝试更新子文档时,您需要先找到该文档,然后更新子文档。
您可以找到完整的来源here