使用Mongoose的doc.save()更新子文档

时间:2016-02-22 23:21:07

标签: node.js mongodb mongoose

我对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);
        });

我的问题是为什么子文档不想保存,是否有更好的方法来运行此更新操作而不是替换整个文档?

1 个答案:

答案 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