Javascript 在node.js中的函数中包装mongo update
在函数中包装mongo查询/插入以使其可重用的正确方法是什么?我有一个更新操作,可能发生在不同的地方,我只想写一次并重用它。我正在使用MongoJS与MongoDb API进行接口 当我采取以下措施时: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.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.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);
});
}
你的方法非常好。谢谢你的解释!