У меня есть массив внутри моего объекта, который содержит другой объект, и я пытаюсь выборочно обновлять один из этих объектов на основе значения (термина) внутри него. Тем не менее, я терплю неудачу, каждый раз, когда я добавляю код обновления, функция просто кажется переданной на этот вызов и не проходит через остальную часть функции, я могу сказать, что ни один из вызовов console.log после того, как эта точка вызвана ,Meteor update Mongo Sub Collection, не продолжение
Вот структура объекта я Fetching:
{ "_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 } ]
}
я могу получить доступ и регистрации данного объекта на консоль с помощью вызова, если код событие правильно установлено в функции.
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 . . . . }
Как она вызывается с обратным вызовом он работает Async.
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.
Благодаря
Gareth
Привет, Дэвид, спасибо за ответ, да, этот код будет работать только на сервере. Я думаю, что обратный вызов действительно не нужен, поскольку я мог бы сделать вставку в методе. Тем не менее, я удалил ссылку на обратный вызов и даже добавил следующее к самой верхней части функции, и функция просто кажется остановлена на этой строке и не идет дальше, без ошибок, ничего не останавливается. Я даже сильно закодировал значения, и я просто пытаюсь обновить основной объект, а не что-либо в подвале. –
HTLevents.update ({_id: 'KH5SsND7f9urKSEyz'}, {$ set: {"enabled": false}}); –
Да, конечно, это странно ... Я не могу придумать, почему метод просто останавливается в середине операции БД. Является ли ваш процессор на 100% или ваш жесткий диск сходит с ума или что-то в этом роде? Возможно, просто попробуйте удалить строки кода, пока не получите что-то для работы. –