Meteor MapReduce Package Error: A method named is already defined
Meteor MapReduce Package Error: A method named is already defined
尝试使用 monbro:mongodb-mapreduce-aggregation
到 运行 一个超级简单的 mapReduce 函数。虽然它第一次运行良好,但随后的调用出现以下错误:
I20150608-11:11:05.294(-4)? Exception while invoking method 'exportDonations' Error: A method named '/donation_totals_by_donor/insert' is already defined
I20150608-11:11:05.294(-4)? at packages/ddp/livedata_server.js:1461:1
I20150608-11:11:05.294(-4)? at Function._.each._.forEach (packages/underscore/underscore.js:113:1)
I20150608-11:11:05.294(-4)? at [object Object]._.extend.methods (packages/ddp/livedata_server.js:1459:1)
I20150608-11:11:05.294(-4)? at [object Object].Mongo.Collection._defineMutationMethods (packages/mongo/collection.js:904:1)
I20150608-11:11:05.294(-4)? at new Mongo.Collection (packages/mongo/collection.js:209:1)
I20150608-11:11:05.295(-4)? at [object Object].ns.Collection (packages/matb33:collection-hooks/collection-hooks.js:190:1)
I20150608-11:11:05.295(-4)? at [object Object].Meteor.methods.exportDonations (app/server/index.js:44:19)
I20150608-11:11:05.295(-4)? at [object Object].methodMap.(anonymous function) (packages/meteorhacks:kadira/lib/hijack/wrap_session.js:160:1)
I20150608-11:11:05.295(-4)? at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1617:1)
I20150608-11:11:05.295(-4)? at packages/ddp/livedata_server.js:648:1
这是我的 Meteor 方法:
var Reduced = new Mongo.Collection("donation_totals_by_donor");
var map = function() {
if(!this.donor) {
return;
}
emit(this.donor, this.amount);
}
var reduce = function(donorId, totalAmount) {
return Array.sum(totalAmount);
}
var result = Donations.mapReduce(
map,
reduce,
{
query: { createdAt: { $gte: new Date('Jan 1, ' + year), $lt: new Date('Jan 1, ' + (year + 1)) } },
out: "donation_totals_by_donor",
verbose: true
}
);
return Reduced.find({}).fetch();
此错误是多次定义集合的结果。您需要将 new Mongo.Collection
代码移到方法之外。
通常您会在一个中心位置定义您的集合,例如lib/collections/mycollection.js
。但是,由于此代码仅在服务器上 运行,您可以将其保留在此文件的顶部或将其放在 server/collections/reduced.js
.
之类的位置
尝试使用 monbro:mongodb-mapreduce-aggregation
到 运行 一个超级简单的 mapReduce 函数。虽然它第一次运行良好,但随后的调用出现以下错误:
I20150608-11:11:05.294(-4)? Exception while invoking method 'exportDonations' Error: A method named '/donation_totals_by_donor/insert' is already defined
I20150608-11:11:05.294(-4)? at packages/ddp/livedata_server.js:1461:1
I20150608-11:11:05.294(-4)? at Function._.each._.forEach (packages/underscore/underscore.js:113:1)
I20150608-11:11:05.294(-4)? at [object Object]._.extend.methods (packages/ddp/livedata_server.js:1459:1)
I20150608-11:11:05.294(-4)? at [object Object].Mongo.Collection._defineMutationMethods (packages/mongo/collection.js:904:1)
I20150608-11:11:05.294(-4)? at new Mongo.Collection (packages/mongo/collection.js:209:1)
I20150608-11:11:05.295(-4)? at [object Object].ns.Collection (packages/matb33:collection-hooks/collection-hooks.js:190:1)
I20150608-11:11:05.295(-4)? at [object Object].Meteor.methods.exportDonations (app/server/index.js:44:19)
I20150608-11:11:05.295(-4)? at [object Object].methodMap.(anonymous function) (packages/meteorhacks:kadira/lib/hijack/wrap_session.js:160:1)
I20150608-11:11:05.295(-4)? at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1617:1)
I20150608-11:11:05.295(-4)? at packages/ddp/livedata_server.js:648:1
这是我的 Meteor 方法:
var Reduced = new Mongo.Collection("donation_totals_by_donor");
var map = function() {
if(!this.donor) {
return;
}
emit(this.donor, this.amount);
}
var reduce = function(donorId, totalAmount) {
return Array.sum(totalAmount);
}
var result = Donations.mapReduce(
map,
reduce,
{
query: { createdAt: { $gte: new Date('Jan 1, ' + year), $lt: new Date('Jan 1, ' + (year + 1)) } },
out: "donation_totals_by_donor",
verbose: true
}
);
return Reduced.find({}).fetch();
此错误是多次定义集合的结果。您需要将 new Mongo.Collection
代码移到方法之外。
通常您会在一个中心位置定义您的集合,例如lib/collections/mycollection.js
。但是,由于此代码仅在服务器上 运行,您可以将其保留在此文件的顶部或将其放在 server/collections/reduced.js
.