如何通过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); } } );