[英]Meteor update Mongo Sub Collection, not proceeding
我的對象中有一個包含其他對象的數組,我正在嘗試根據其中的值(術語)有選擇地更新其中一個對象。 但是,我失敗得很慘,每次我添加更新代碼時,該函數似乎只是在調用該函數,而不會繼續執行該函數的其余部分,我可以說在那之后沒有任何 console.log 調用被調用.
這是我正在獲取的對象的結構:
{ "_id" : "KH5SsND7f9urKSEyz",
"eventName" : "macmillan",
"twitterEnabled" : true,
"instagramEnabled" : false,
"vineEnabled" : false,
"fetchCount" : 2,
"enabled" : true,
"searchTerms" : [ { "term" : "badger", "latestTwitter" : 0, "latestInstagram" : 0, "latestVine" : 0 }, { "term" : "freedom", "latestTwitter" : 0, "latestInstagram" : 0, "latestVine" : 0 } ]
}
如果在函數中正確設置了 eventID,我可以通過調用訪問此對象並將其記錄到控制台。
console.log(HTLEvents.find({_id: eventID}));
但是,當我調用它來更新方法時,它會停止,沒有錯誤,只是不會繼續。
HTLevents.update( {_id : eventID , "searchTerms.term" : searchTerm } ,
{$set : {"searchTerms.$.latestTwitter" : latest} } ,
false ,
true)
我已經三重檢查,所有使用的變量都不是未定義的並且具有正確的值。
這是完整的函數,這是使用來自 SyncedCron 重復事件的 Meteor.call 調用的
Meteor.call('searchTermsUpdateLatest', eventList[eventi]._id, returnValue[i][1].searchedTerm, returnValue[i][1].networkSearched, returnValue[i][1].latestID, function (error, eventList) {function . . . . }
當它被回調調用時,它正在運行異步。
HTLEvents = new Mongo.Collection('htlevents');
Meteor.methods({
fetchEnabledEvents: function() {
return HTLEvents.find({enabled: true}, {}).fetch();
},
searchTermsUpdateLatest: function(eventID, searchTerm, network, latest, callback) {
console.log('Updating:' + eventID);
console.log(eventID + " " + searchTerm + " " + network + " " + latest);
console.log(HTLEvents.find({_id: eventID}));
console.log(HTLEvents.find({_id: eventID , "searchTerms.term" : searchTerm}));
var err = undefined
if (eventID && searchTerm && network && latest) {
console.log("All parameters set, now updating the " + network + " for " + searchTerm);
if(network === "twitter"){
console.log("Updating twitter latest id for " + searchTerm);
HTLevents.update( {_id : eventID , "searchTerms.term" : searchTerm } ,
{$set : {"searchTerms.$.latestTwitter" : latest} } ,
false ,
true)
} else if (network == "instagram") {
console.log("Updating instagram latest id for " + searchTerm);
HTLevents.update({_id : { _str: eventID } , "searchTerms.term":searchTerm} , {$inc: {"searchTerms.$.latestInstagram": latest}});
} else if (network == "vine") {
console.log("Updating vine latest id for " + searchTerm);
HTLevents.update({_id : { _str: eventID } , "searchTerms.term":searchTerm} , {$inc: {"searchTerms.$.latestVine": latest}});
}
} else {
err = "Unable to update latestID, one or more values not set in method call."
console.log("Unable to update latestID, one or more values not set in method call.")
}
console.log('Updated:')
console.log(HTLevents.find({_id : eventID}));
callback();
},
});
我完全希望我在做一些愚蠢的事情,所以提前抱歉,但我對 Meteor 和 Javascript 都很陌生。
謝謝
加雷斯
與普通的 node.js 代碼不同,您不會在meteor 中向您的方法簽名顯式添加回調。 您的方法定義應如下所示:
searchTermsUpdateLatest: function(eventID, searchTerm, network, latest) {...}
同樣,您不會在函數末尾調用回調(刪除最后一行)。 如果該方法應該返回一個值,您可以在函數的末尾顯式地執行此操作。
有關更多詳細信息和示例,請參閱Meteor.call的文檔。
請注意,如果您從SyncedCron
進行調用,那么它正在您的服務器上運行,您可能需要異步調用樣式(不要傳遞回調)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.