2016-10-06 8 views
1

mongoコレクション内のドキュメントのパラメータに基づいて、特定のフィールドをページに公開しようとしています。これはMongoDBのマニュアルです:https://docs.mongodb.com/manual/reference/operator/aggregation/cond/MongoDB条件付き集計はMeteor 1.4.xで利用できますか?

Meteorは条件付き集計をサポートしていますか?

return Cases.find({ 
      subscribers: { $in: [this.userId] } 
      }, { 
      fields: { $cond: [ { $eq: ['classified', true] } , Cases.privateFields, Cases.publicFields ] } 
     }); 

答えて

1

私は集計に間違って近づいていることに気付きました。アグリゲーション(meteorhacks)を実装するためのオプションのいくつかの研究を行った後、私はコレクションの反応性を保持している、自分自身を実装することを決定した:

Meteor.publish('cases.dashboard', function casesDashboard() { 
    if (!this.userId) { 
     return this.ready(); 
    } 
    return Cases.conditionalFields({ 
      subscribers: { $in: [this.userId] } 
     }, { 
      fields: [ { $eq: ['classified', true] } , Cases.privateDashboardFields, Cases.dashboardFields ] 
     }); 
}); 

はMongo.Collection

class CasesCollection extends Mongo.Collection { 
    conditionalFields(selector, modifier) { 
     let cond = modifier.fields[0], 
      pos = modifier.fields[1], 
      neg = modifier.fields[2]; 

     if (cond) { 
      modifier = { fields: pos }; 
     } else { 
      modifier = { fields: neg }; 
     } 

     const cursor = this.find(selector, modifier); 
     return cursor; 
    } 
} 

使用法を拡張します