Để làm cho điều này hoạt động, vấn đề là thêm một số logic có điều kiện hơn khi một giá trị được chuyển qua { $in: value }
. Vì lỗi xuất hiện là do sự cố định dạng với { $in: value }
, chìa khóa là đảm bảo điều này chỉ được kích hoạt khi có một giá trị được chuyển.
Vì vậy, cuối cùng, để điều này hoạt động - mà không cần phải chuyển vào một mảng của tất cả các giá trị có thể, đây không phải là một giải pháp thanh lịch cũng như hiệu quả - tôi đã thay đổi điều này:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
... tới đây:
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 };
}
}
Điều này về cơ bản là đảm bảo rằng một mảng có ít nhất một giá trị có sẵn khi {$ in:value} được kích hoạt.
Thay đổi duy nhất khác cần thiết là thay đổi liên quan đến những gì được phát ra khi người dùng đã bỏ chọn tất cả các giá trị. Tôi đã xử lý điều đó, theo cách này:
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);
}
}
}