Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将findAndModify与Node.js MongoDB驱动程序一起使用?_Node.js_Mongodb - Fatal编程技术网

如何将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,当未找到匹配项时,不会插入新文档。