MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Eine elegantere Art, Filterwerte in der Angular-App zu handhaben

Damit dies funktioniert, muss etwas mehr Bedingungslogik hinzugefügt werden, wenn ein Wert über { $in: value } übergeben wird . Da die aufgetretenen Fehler auf Formatierungsprobleme mit { $in: value } zurückzuführen waren , war der Schlüssel, sicherzustellen, dass dies nur ausgelöst wird, wenn ein Wert übergeben werden muss.

Um dies am Ende zum Laufen zu bringen - ohne ein Array aller möglichen Werte übergeben zu müssen, was weder eine elegante noch eine performante Lösung war - habe ich Folgendes geändert:

private processType(name: string, value: any, body)
{
    if (this.body[name] && !value) {
            delete this.body[name];
        } else {
            this.body[name] = { $in: value };
        }
}

... dazu:

private processType(name: string, value: any, body)
{
    if (this.body[name] && !value || this.body[name] && value.length < 1) {
            delete this.body[name];
        } else if (value) {
            this.body[name] = { $in: value };
        }
}

Dadurch wird im Wesentlichen sichergestellt, dass ein Array mit mindestens einem Wert verfügbar ist, wenn { $in:value } ausgelöst wird.

Die einzige andere notwendige Änderung betraf das, was ausgegeben wird, wenn ein Benutzer alle Werte deselektiert hat. Ich habe das so gehandhabt:

private sendLangSelections(languageFilterOptions) {
    const origLangArray = ['English', 'Spanish', 'Mandarin'];
    if (languageFilterOptions)
        {
            let selectionsArray = this.languageFilterOptions.selection;
            let values = selectionsArray.map((a) => { return a.value; });
            if (values && values.length > 0)
                {
                    this.sendLanguage.emit(values);
                }
            else if (values && values.length < 1)
                {
                    this.sendLanguage.emit(this.obj = undefined);
                }
        }
}