我有一个在本地运行完美的Meteor应用程序,但是当我部署到meteor.com时,一个方法将无法运行。所有其他方法都运行良好。
这是相关代码:
客户端:按钮单击以将公司添加到阵列
Template.ValuationTableComps.events ({
'submit form': function(e) {
e.preventDefault();
var valuationId = this._id;
var selection = {
valuationSelections: $(e.target).find('[name=selectionComp]').val()};
Valuations.update(valuationId, {$addToSet: selection}, function () {});
}
});
客户端:按钮单击以根据上面的选择重新运行阵列
Template.ValuationCalc.events({
'click #agg': function(e) {
e.preventDefault();
var valuationId = this._id;
var valuationSelections = this.valuationSelections;
Meteor.call('valuationAggregate', valuationId, valuationSelections, function (error, result) {});
}
});
Lib:运行聚合并将结果升级到新集合的方法
Meteor.methods({
valuationAggregate: function(valuationId, valuationSelections) {
if (Meteor.isServer) {
check(valuationId, String);
check(valuationSelections, Array);
var pipelineSelections = [
//build pipeline//
];
var results = Companies.aggregate(pipelineSelections);
results.forEach(function(valuationResults) {
ValuationResults.update({valuationId: valuationId}, valuationResults, {upsert: true});
});
}
}});
在本地运行时,一切正常。我可以在客户端和服务器上安装console.log valuationId
,valuationSelections
和ValuationResults.find({valuationId:valuationId}).fetch()
,并且都返回正确的结果。
但是,当我部署到meteor.com时,该方法将无法运行。在我的浏览器控制台中,我看到valuationId
和valuationSelections
。但是,ValuationResults查询返回[ ]
。
我在ValuationResults中有虚拟数据,我可以在浏览器控制台中看到,因此集合很好。但我不明白为什么该方法可以在本地工作但不在部署。这是唯一不起作用的东西,其他一切都很好。谢谢。
答案 0 :(得分:0)
解决:
我能够运行meteor logs myApp
并看到错误MongoError: exception: invalid operator '$literal'
。我的$project
阶段包含valuationId: {$literal: valuationId}
,以便为新文档添加新字段。我不知道为什么会出现错误,但似乎有一个已知的mongodb问题:https://jira.mongodb.org/browse/RUBY-668。
我从我的管道中取出了$literal
,而只更新了现有的估价文件。现在在本地和部署时工作正常。