2015-06-16 53 views
-1

我有一個在我的對象中包含其他對象的數組,我試圖有選擇地更新其中一個基於它的值(術語)的對象。然而,我失敗了,每次我添加更新代碼的功能只是似乎手中的那個調用,並沒有繼續通過其餘的功能,我可以告訴沒有console.log調用後,該點被調用。流星更新Mongo子集合,而不是進行

這裏是我取的對象的結構:

{ "_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) 

我有三重檢查,並使用所有的變量都沒有不確定的,並有正確的價值觀。

下面是完整的功能,這是在使用Meteor.call從SyncedCron稱爲重複事件

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

我完全認爲我在做一些愚蠢的事情,所以提前抱歉,但我對流星和Javascript都很陌生。

感謝

加雷思

回答

0

不像正常的Node.js代碼,你沒有明確的回調流星添加到您的方法簽名。你的方法定義應該是這樣的:

searchTermsUpdateLatest: function(eventID, searchTerm, network, latest) {...} 

同樣,你不會在函數結束時調用回調函數(去掉最後一行)。如果該方法應該返回一個值,那麼可以在函數結束時明確地做到這一點。

有關更多詳細信息和示例,請參閱Meteor.call的文檔。

請注意,如果您從SyncedCron撥打電話,那麼它在您的服務器上運行,您可能需要異步調用樣式(不要傳遞迴調)。

+0

嗨大衛,謝謝你的回覆,是的這個代碼將永遠只能在服務器上運行。我想回調是不必要的,因爲我可以在該方法中插入。然而,我已經刪除了對回調的引用,甚至將以下內容添加到函數的頂部,並且該函數似乎停止在此行,並且不再繼續,沒有錯誤,它只是停止。我甚至硬編碼了這些值,我只是試圖更新主要對象而不是子數組中的任何東西。 –

+0

HTLevents.update({_id:'KH5SsND7f9urKSEyz'},{$ set:{「enabled」:false}}); –

+0

是的,那肯定是奇怪的......我想不出在數據庫操作中停止方法的好理由。你的CPU是100%還是硬盤瘋了?也許只是嘗試刪除代碼行,直到你得到一些工作。 –