Pour que cela fonctionne, il s'agit d'ajouter un peu plus de logique conditionnelle au moment où une valeur est transmise via { $in: value }
. Étant donné que les erreurs qui apparaissaient étaient dues à des problèmes de formatage avec { $in: value }
, la clé était de s'assurer que cela n'est déclenché que lorsqu'il y a une valeur à transmettre.
Donc, au final, pour que cela fonctionne - sans avoir à passer un tableau de toutes les valeurs possibles, ce qui n'était pas une solution élégante ni performante - j'ai changé ceci :
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
... à ceci :
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 };
}
}
Cela garantit essentiellement qu'un tableau d'au moins une valeur est disponible lorsque le { $in:value } est déclenché.
Le seul autre changement nécessaire était celui impliquant ce qui est émis lorsqu'un utilisateur a désélectionné toutes les valeurs. J'ai géré cela, de cette façon :
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);
}
}
}