【问题标题】:Meteor update Mongo Sub Collection, not proceedingMeteor 更新 Mongo Sub Collection,未进行
【发布时间】:2015-06-17 05:21:35
【问题描述】:

我的对象中有一个数组,其中包含其他对象,我正在尝试根据其中的值(术语)有选择地更新其中一个对象。但是我失败得很惨,每次我添加更新代码时,该函数似乎只是在该调用中提交并且没有继续执行该函数的其余部分,我可以说在那之后没有任何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 都很陌生。

谢谢

加雷斯

【问题讨论】:

    标签: javascript node.js mongodb meteor


    【解决方案1】:

    与普通的 node.js 代码不同,您无需在流星中显式地为您的方法签名添加回调。您的方法定义应如下所示:

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

    同样,您不会在函数末尾调用回调(删除最后一行)。如果该方法应该返回一个值,您可以在函数末尾显式地执行此操作。

    有关更多详细信息和示例,请参阅Meteor.call 的文档。

    请注意,如果您从 SyncedCron 进行调用,那么它在您的服务器上运行,您可能需要异步调用样式(不要传递回调)。

    【讨论】:

    • 嗨大卫,谢谢你的回复,是的,这段代码只会在服务器上运行。我想回调是不必要的,因为我可以在方法中插入。然而,我已经删除了对回调的引用,甚至将以下内容添加到函数的最顶部,并且该函数似乎停止在这一行并且不再继续,没有错误,它只是停止。我什至对这些值进行了硬编码,并且只尝试更新主对象而不是子数组中的任何内容。
    • HTLevents.update( {_id : 'KH5SsND7f9urKSEyz'} , {$set : {"enabled" : false}});
    • 是的,这当然很奇怪......我想不出一个很好的理由来让一个方法在数据库操作中间停止。你的 CPU 是 100% 还是你的硬盘发疯了或类似的情况?也许只是尝试删除代码行,直到你得到一些工作。
    • 好的,我将尝试将 mongo 方法移动到一个单独的方法中,该方法在另一个 Meteor.Call 中不使用 Meteor.Call,在 SyncredCron 调用中,只是为了让事情变得有点简单,看看怎么了。一旦我进行了更改,将更新回来。如果这没有帮助我有点难过。
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2018-05-07
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多