Я бы хотел запросить коллекцию Mon go с одним поисковым термином и проверить этот поисковый запрос по нескольким полям в коллекции. Я пытался создать этот запрос миллионами разных способов, но независимо от того, что я делаю, я продолжаю возвращать все 4 документа вместо 2, которые фактически соответствуют условиям.
const queryRecipe = {'recipe.recipe.name': {
$regex: inputValue,
$options: 'i',
}};
const queryFood = {'food.food.name': {
$regex: inputValue,
$options: 'i',
}};
const queryName = {'name': {
$regex: inputValue,
$options: 'i',
}};
let params = {
query: JSON.stringify({$or: [queryRecipe, queryFood, queryName]}),
};
getMealPlans(params).then(results => {
if (results) {
console.log(results); // should only return 2, but returns 4
} else {
throw new Error('error');
}
});
Для справки, вот функция getMealPlans
из моего файла служб api. js (примечание: apiCall
- это вспомогательная c вспомогательная функция, которую мы используем во всем приложении)
export function getMealPlans(id, params = {}) {
params.populate = [
{
path: 'recipes.recipe',
populate: { path: 'foods.food' },
},
{
path: 'foods.food',
},
];
return apiCall('get', `/mealplan`, params);
}
Обратите внимание, что если я запрашиваю только один термин, он работает:
const query = {}
query['recipe.recipe.name'] = {
$regex: inputValue,
$options: 'i',
}
let params = {
query: query;
}