在Mongoosejs中dynamic填充聚合函数

我有一个在MongoDB中存储angular色的NodeJS / Express应用程序。 我想在数据库中的特定字段计数,以便我可以在仪表板上报告。

例如,一些用户填写了他们的名字,另一些填写了他们的邮政编码。我想报告填写名字的用户的百分比。

为此,我设置了一个控制器,可以调用Persona模型。 现在我想dynamic聚合在特定的领域。

我现在解决的方法是用switch语句填充一个匹配variables:

countField: function countField(field, cb) { switch(field) { case 'personal_firstname': var match = {$match: { "personal_firstname": { $exists: true } }}; break; break; case 'address_postalcode': var match = {$match: { "address_postalcode": { $exists: true } }}; break; break; default: var match = {$match: { "personal_firstname": { $exists: true } }}; } return this.aggregate([ match, {$group: { _id: null, totalfields: {$sum: 1} }} ], cb) 

}

但是,如果我可以在我的聚合函数中dynamic插入“field”参数,那将会更好。 不过,mongoose不允许我这样做。

有没有办法dynamic插入mongooseJS聚合函数?

您可以使用括号表示法来dynamic构build匹配对象,如下所示:

 countField: function countField(field, cb) { var match = { "$match": {} }; if (!field) field = "personal_firstname"; match["$match"][field] = { $exists: true } return this.aggregate([ match, { "$group": { "_id": null, "totalfields": { "$sum": 1 } } } ], cb) }