Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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
Javascript 在node.js中的函数中包装mongo update_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 在node.js中的函数中包装mongo update

Javascript 在node.js中的函数中包装mongo update,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,在函数中包装mongo查询/插入以使其可重用的正确方法是什么?我有一个更新操作,可能发生在不同的地方,我只想写一次并重用它。我正在使用MongoJS与MongoDb API进行接口 当我采取以下措施时: mongo.myt.update( {'_id': req._id}, { $addToSet: { "aggregate.clientIds": req.myt.clientIds

在函数中包装mongo查询/插入以使其可重用的正确方法是什么?我有一个更新操作,可能发生在不同的地方,我只想写一次并重用它。我正在使用MongoJS与MongoDb API进行接口

当我采取以下措施时:

 mongo.myt.update(
        {'_id': req._id},
        {
            $addToSet: {
                "aggregate.clientIds": req.myt.clientIds
            },
            $inc: {"aggregate.seenCount": 1},
            $set: {
                "headers": req.myt.headers,
                "ip": req.myt.ip
            },
            $setOnInsert: {
                '_id': req.myt._id,
                'derived': req.myt.derived
            }
        },
        {upsert: true},
        function (err, savedId) {
            if (err || !savedId) console.log("failed to save :" + req.myt + " because of " + err);
            else console.log("successfully saved :" + req.myt);
        });
并用一个简单的函数将其包装,如:

function mongoInsert(req) {
   //same query as above
}
然后使用以下命令调用它:

 mongoInsert(req);
我看不出在评测时对速度有任何影响。我是否应该向包装器函数添加回调,是否需要?我原以为这会对性能产生一些影响,因此需要采取不同的做法

所以有几个问题

  • 上述调用mongoInsert()的方法是否会被同步调用并阻塞,直到异步mongo更新完成

  • 如果它真的变为同步,我会期待一个我没有看到的性能影响。那么,我采用的方法可以使用吗

  • 如果不是,正确的方法是什么

  • mongoInsert()
    仍然是异步的,因为它正在调用异步函数(
    mongo.myt.update()
    )。即使不添加回调函数,它也不会神奇地变得同步

    您现在编写它的方式是“激发并忘记”:在您调用的代码中的某个地方,
    mongoInsert()

    这是否可以接受是一个设计决定

    如果您确实希望获得更新结果的通知,则可以选择回调:

    function mongoInsert(req, callback) {
      callback = callback || function() {}; // dummy callback when none is provided
      mongo.myt.update(..., function(err, savedId) {
        ...log status here...
        callback(err, savedId);
      });
    }
    

    你的方法非常好。谢谢你的解释!