Доступна ли условная агрегация MongoDB в Meteor 1.4.x?

#javascript #mongodb #meteor

#javascript #mongodb #meteor

Вопрос:

Я пытаюсь опубликовать определенные поля на странице на основе параметра документа в коллекции mongo. Это из руководства по MongoDB: https://docs.mongodb.com/manual/reference/operator/aggregation/cond /

Поддерживает ли Meteor условную агрегацию?

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

Ответ №1:

Итак, я понял, что неправильно приближаюсь к агрегатам. После некоторых исследований вариантов реализации агрегации (meteorhacks) Я решил реализовать свой собственный, который сохраняет реактивность коллекции:

Расширьте Mongo.Коллекция

 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;
    }
}
  

Использование:

 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 ]
        });
});