यह काम करने के लिए, यह कुछ और सशर्त तर्क जोड़ने की बात है जब कोई मान { $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);
}
}
}