Динамические свойства или агрегатные функции в моделях с обратной связью

Как мне использовать агрегатные функции в моделях Loopback? Если у меня есть модель, поддерживаемая базой данных mysql, могу ли я иметь Model1 с отношением hasMany к Model2 (с заданным числовым свойством) и иметь свойство в Model1, которое получает SUM этого поля из Model2?

    {
        "Model1" : {
            "Relations" : {
                "model2s" : {
                    "type": "hasMany",
                    "model": "Model2",
                    "foreignKey": "model1Id"
                }
            },
            "Properties" : {
                "total" : {
                    "type": "Number"
                    [SUM of Model2 'amount' field]
                }
            }
        },
        "Model2" : {
            "Relations" : {
                "model1s" : {
                    "type": "belongsTo",
                    "model": "Model1",
                    "foreignKey": "model1Id"
                }
            },
            "Properties" : {
                "amount" : {
                    "type": "Number"
                }
            }
        }
    }

С другой стороны, как правильно поместить условное выражение в модель, чтобы значение, возвращаемое получателем, зависело от некоторого выражения? Я хочу вернуть значение из отношения, если оно существует, в противном случае вернуть то, которое существует в первичной модели.

Я пробовал это (псевдокод):

    module.exports = function(MyModel) {
        MyModel.on('attached', function() {
            var app = MyModel.app;

            MyModel.getter['total'] = function() {
                return (this.model1Id ? this.model1.total : this.total);
            };
        });

    };

Тем не менее, я получаюRangeError: Maximum call stack size exceeded ошибка (аналогично тому, что отмечено вэтот вопрос). Я предполагаю, что это потому, что он рекурсивно вызывает геттер снова и снова, но я не уверен, как решить проблему.

Заранее спасибо...

Ответы на вопрос(4)

Ваш ответ на вопрос