Dynamische Eigenschaften oder Aggregatfunktionen in Loopback-Modellen

Wie würde ich Aggregatfunktionen in Loopback-Modellen verwenden? Wenn ich ein Modell habe, das von einer MySQL-Datenbank unterstützt wird, kann ich dann Modell1 mit einer hasMany-Beziehung zu Modell2 (mit einer bestimmten numerischen Eigenschaft) und eine Eigenschaft in Modell1 haben, die die SUMME dieses Felds aus Modell2 abruft?

    {
        "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"
                }
            }
        }
    }

Was ist im Einzelfall die richtige Methode, um eine Bedingung in ein Modell einzufügen, sodass der von einem Getter zurückgegebene Wert von einem Ausdruck abhängt? Ich möchte einen Wert aus einer Beziehung zurückgeben, falls vorhanden, andernfalls den Wert, der im primären Modell vorhanden ist.

Ich habe es versucht (Pseudocode):

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

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

    };

Am Ende bekomme ich jedoch eineRangeError: Maximum call stack size exceeded Fehler (ähnlich wie indiese Frage). Ich gehe davon aus, dass dies daran liegt, dass der Getter immer wieder rekursiv aufgerufen wird, aber ich bin mir nicht sicher, wie das Problem behoben werden kann.

Danke im Voraus...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage