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);
}
}
}