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