Aby to fungovalo, je potřeba přidat nějakou další podmíněnou logiku, když je hodnota předána přes { $in: value }
. Protože chyby, které se objevovaly, byly způsobeny problémy s formátováním s { $in: value }
, klíčem bylo zajistit, aby se to spouštělo pouze tehdy, když existuje hodnota, která má být předána.
Aby to nakonec fungovalo – bez nutnosti předávat pole všech možných hodnot, což nebylo elegantní ani výkonné řešení – změnil jsem toto:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
... na toto:
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 };
}
}
Tím je v podstatě zajištěno, že pole alespoň jedné hodnoty je dostupné, když je spuštěna { $in:hodnota }.
Jedinou další potřebnou změnou byla ta, která zahrnovala to, co se vyšle, když uživatel zruší výběr všech hodnot. Vyřešil jsem to takto:
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);
}
}
}