For at få dette til at fungere, er det et spørgsmål om at tilføje noget mere betinget logik til, hvornår en værdi sendes via { $in: value }
. Da fejlene, der dukkede op, var på grund af formateringsproblemer med { $in: value }
Nøglen var at sikre, at dette kun udløses, når der er en værdi, der skal passeres.
Så i sidste ende, for at få dette til at fungere - uden at skulle sende en række af alle mulige værdier ind, hvilket ikke var en elegant eller effektiv løsning - ændrede jeg dette:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
... til dette:
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 };
}
}
Hvad dette gør, er grundlæggende at sikre, at en matrix med mindst én værdi er tilgængelig, når { $in:value } udløses.
Den eneste anden nødvendige ændring var den, der involverede det, der udsendes, når en bruger har fravalgt alle værdier. Jeg håndterede det på denne måde:
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);
}
}
}