[英]wrapping mongo update in function in node.js
將mongo查詢/插入包裝在函數中以使其可重用的正確方法是什么? 我有一個更新操作,可能會在各個地方進行,並且只想編寫一次並重用它。 我正在使用MongoJS來連接w / 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()
” :在代碼中的某個位置調用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);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.