如何将findAndModify与Node.js MongoDB驱动程序一起使用?

时间:2016-10-13 19:11:01

标签: 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){
    if(err){
        throw err;
    }if(doc){
        console.log('Existing document updated successfully');
        console.log(doc);
    }
});

我总是得到同样的错误,

  

MongoError:exception:nextSafe():{$ err:"可以规范化查询:   BadValue错误排序规范",代码:17287}

我做错了什么?我是否滥用$ push运算符?我是否需要在某些键值对周围提供引号?这种findAndModify方法让我发疯。我完全不知道我做错了什么。

注意:关于findAndModify,我已经完成了关于SO的其他问题,但这些解决方案都不适用于我。我确定它是关于函数语法的一个小错误。

1 个答案:

答案 0 :(得分:2)

findAndModify 方法具有以下签名

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

其中

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

您收到错误的原因是因为缺少 sort 规范,而是正在读取 doc 更新< strong> sort 参数。

您需要按如下方式指定sort参数:

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);
        }
    }
);