За да работи това, е въпрос на добавяне на по-условна логика към това, когато дадена стойност се предава чрез { $in: value }
. Тъй като грешките, които изскачаха, бяха поради проблеми с форматирането с { $in: value }
, ключът беше да се уверите, че това се задейства само когато има стойност за предаване.
И така, в крайна сметка, за да накарам това да работи - без да се налага да предавам масив от всички възможни стойности, което не беше елегантно, нито ефективно решение - промених това:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
... към това:
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 };
}
}
Това, което прави, е основно да гарантира, че масив от поне една стойност е наличен, когато се задейства {$in:value}.
Единствената друга необходима промяна беше тази, включваща какво се излъчва, когато потребителят е премахнал всички стойности. Справих се с това по този начин:
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);
}
}
}