Javascript Mongoose$pushAll覆盖当前数组对象

Javascript Mongoose$pushAll覆盖当前数组对象,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,所以我有一个文档,我试图更新它的注释,当我这样做时,它似乎会用新的信息覆盖数组。知道为什么吗 Confession.findOne({_id: confessionID}, function (err, confession) { if (err){ console.log(err); } else { confession.update( {$pushAll: {'comments.commentData'

所以我有一个文档,我试图更新它的注释,当我这样做时,它似乎会用新的信息覆盖数组。知道为什么吗

Confession.findOne({_id: confessionID}, function (err, confession) {
    if (err){
        console.log(err);
    } else {

           confession.update(
                {$pushAll: {'comments.commentData':
                    [{comment: req.body.text, commenter: req.body.name }]
                }},
                {upsert: true},
                function (err, confession) {
                    if (err) {
                        console.log(err);

                    } else {
                        res.send(confession.comments);
                        console.log(confession);
                    }
                });
            }
这是所要求的一份样本文件

 { "__v" : 0,
   "_id" : ObjectId( "5171c2bd47a7510000000002" ),
   "absolves" : { "IDs" : [ null ],
   "num" : 2 },
   "comments" : { "commentData" : [
      { "comment" : "asdfas wdfwe cqwe qwe w w",
        "_id" : ObjectId( "5179c9fa79c165e74d000002" ),
        "timeStamp" : Date( 1366936058266 ) }],
   "num" : 0 },
   "condemns" : { "IDs" : [ null ],
   "num" : 2 },
   "facebook" : 1232876940,
   "removed" : false,
   "text" : " another confession",
   "time" : Date( 1366409917817 ) }
试试这个

{$push: {'comments.commentData':
                    {comment: req.body.text, commenter: req.body.name }
                }},

不是答案,但为什么要插入?您知道该文档存在,因为您只是通过id找到它。在这个问题上,您可以跳过嵌套的异步,只需执行
commission.update({u id:commissionid},update,callback)
您可以在更改之前或之后(或两者兼而有之)包含一个示例文档吗,commentData中的数组刚刚被新的数据重写。您可以发布您的模式,或者是指向我可以运行以复制的代码的链接吗?我运气不好