如何将findAndModify与Node.js MongoDB驱动程序一起使用?
下面的代码有什么问题如何将findAndModify与Node.js MongoDB驱动程序一起使用?,node.js,mongodb,Node.js,Mongodb,下面的代码有什么问题 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){
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:异常:nextSafe():{$err:“无法规范化查询:
BadValue错误排序规范”,代码:17287}
我做错了什么?我是否误用了$push操作符?我是否需要在一些键值对周围提供引号?这种方法快把我逼疯了。我完全不知道我做错了什么
注意:我已经讨论了关于FindModify的其他问题,但这些解决方案都不适合我。我确信这是一个关于函数语法的小错误 方法具有以下特征
findAndModify(query, sort, doc, options, callback)
在哪里
查询
:用于查找要修改的对象的查询对象排序
:如果多个文档匹配,请选择指定排序顺序中的第一个文档作为要操作的对象doc
:要更新的字段/VAL选项
可选:可选设置
排序
规范,而是将更新文档
读取为排序
参数
您需要指定排序参数,如下所示:
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);
}
}
);
好的,那起作用了。谢谢!你是对的,我只是缺少排序参数。我认为这是一个可选参数,但显然不是。另外,我是否可以通过设置upsert:true使用findAndModify插入新文档?@ZaidHumayun是的,如果
upsert
选项设置为true,mongo将在没有文档与查询条件匹配时创建新文档。默认值为false,当未找到匹配项时,不会插入新文档。