如何通过Node.js MongoDB驱动程序使用findAndModify?

下面的代码有什么问题?

db.get().collection('bars').findAndModify({ barID: req.body.button },{ $push: { usersfbID: req.body.profileUser[0].facebookID, usersDocID: req.body.profileUser[0]._id } },{ new: true }, function(err, doc){ if(err){ throw err; }if(doc){ console.log('Existing document updated successfully'); console.log(doc); } }); 

我总是得到同样的错误,

MongoError:exception:nextSafe():{$ err:“Can not canon canonicalize query:BadValue bad sort specification”,code:17287}

我究竟做错了什么? 我滥用$ push操作符吗? 我是否需要提供一些关键值对的引号? 这findAndModify方法正在让我疯狂。 我完全不知道我在做什么错。

注:我已经通过关于findAndModify的其他问题,但这些解决scheme都没有为我工作。 我相信它的function语法的一个小错误。

findAndModify方法具有以下签名

 findAndModify(query, sort, doc, options, callback) 

哪里

  • query <object> :查询对象来定位要修改的对象。
  • sort <array> :如果多个文档匹配,请select指定sorting顺序中的第一个作为要操作的对象。
  • doc <object> :要更新的字段/值。
  • options <object>可选:可选设置。

你得到错误的原因是因为sort规范丢失,而是读取更新doc作为sort参数。

您需要指定sorting参数,如下所示:

 db.get().collection('bars').findAndModify( { "barID": req.body.button }, // query [ ["barID", 1] ], // sort { "$push": { // doc "usersfbID": req.body.profileUser[0].facebookID, "usersDocID": req.body.profileUser[0]._id } }, { "new": true }, // options function(err, doc){ // callback if (err){ throw err; } else if(doc){ console.log('Existing document updated successfully'); console.log(doc); } } );