我尝试总结一个适合特定查询的DataPoints集合的特定列。
getClicksTotalCampaign: function () {
var docs = DataPoints.find({campaign: this._id, influencer: Meteor.userId()});
var clicks = 0;
for(var i = 0; i< docs.length; i++) {
clicks += parseInt(docs[i].clicks);
}
return clicks;
},
我错误地返回DataPoints.find是否有一个对象数组?它的长度总是为null,当我在mongo上进行查询时,我会被回送。 @edit这里的数据架构:
Schemas.DataPoints = new SimpleSchema({
influencer: {
type: String,
label: "Influencer ID"
},
advertiser: {
type: String,
label: "Advertiser ID"
},
campaign: {
type: String,
label: "Campaign ID"
},
amount: {
type: Number,
label: "Amount"
}
});
答案 0 :(得分:2)
使用 aggregation framework ,您可以使用 $match
管道运算符来过滤广告系列和影响者的集合。然后, $group
管道步骤将过滤器中的所有输入文档分组,并将累加器表达式 $sum
应用于该组以获取总文档数。
你的管道看起来像这样:
var DataPoints = new Mongo.Collection('datapoints');
var pipeline = [
{
"$match": {
"campaign": this._id,
"influencer": Meteor.userId()
}
},
{
"$group": {
"_id": null,
"count": {"$sum": "$amount"}
}
}
];
var result = DataPoints.aggregate(pipeline).fetch();
var count = result[0].count;
您可以添加 meteorhacks:aggregate package 来实现Meteor中的聚合:
使用
添加到您的应用中meteor add meteorhacks:aggregate
由于此程序包在Mongo.Collection实例上公开 .aggregate
方法,因此您可以调用该方法以使用包含count字段的文档获取结果数组。例如
if (Meteor.isServer) {
var DataPoints = new Mongo.Collection('datapoints');
Meteor.methods({
getClicksTotalCampaign: function () {
var pipeline = [
{
"$match": {
"campaign": this._id,
"influencer": Meteor.userId()
}
},
{
"$group": {
"_id": null,
"count": {"$sum": "$amount"}
}
}
];
var result = DataPoints.aggregate(pipeline);
return result[0].count;
}
});
}
if (Meteor.isClient) {
setInterval(function () {
Meteor.call('getClicksTotalCampaign', updateCounter);
}, 1000 * 10);
function updateCounter(err, count) {
console.log("this is the new count: ", count)
}
}
答案 1 :(得分:0)
试试这个:
var docs = DataPoints.find({campaign: this._id, influencer: Meteor.userId()}).fetch();