Я только изучаю программирование веб-приложений и у меня есть вопрос, касающийся MongoDB и использования MongoDB в приложении Node-Server. У меня есть база данных MongoDB с ресторанами в Нью-Йорке и веб-сайт, где пользователь может искать рестораны в разных районах и с нужным типом кухни. Я отправляю запрос на получение Ajax на сервер, где я хочу найти подходящие рестораны в базе данных MongoDB. Поскольку пользователь может искать в нескольких районах, я попытался создать оператор запроса в функции.
function createQuery(boroughs, cuisine){
let query = "";
if(!boroughs){
query += `'cuisine': ${cuisine}`;
}else if(!cuisine){
for(let i =0; i< boroughs.length - 1; i++){
query+= `'borough': '${boroughs[i]}',`;
}
query+=`${boroughs[boroughs.length-1]}`
}else{
s+=`{$and:[{`;
for(let i =0; i< boroughs.length-1;i++){
query+= `'borough': '${boroughs[i]}',`;
}
query+=`'borough': '${boroughs[boroughs.length-1]}'},{'cuisine':'${cuisine}'}]}`;
}
return query;
}
Я думаю, что функция работает, и я получаю требуемый запрос в виде строки. Затем я передаю запрос функции поиска MongoDB:
let searchInstruction = createQuery(req.query.boroughs, req.query.cuisine);
console.log(searchInstruction);
let result ="";
result = dbs.collection('restaurants').find(searchInstruction).toArray(function (err, result){
console.log(JSON.stringify(result));
res.send(JSON.stringify(result));
});
Моя проблема в том, что независимо от того, какие параметры поиска у меня есть в журнале, результаты всегда являются всей базой данных. Мне интересно, если невозможно передать строку в .find () - Функция в Mon go -DB. Например, когда я ищу параметры Borough = Manhattan, Brooklyn, Staten Island с итальянской кухней, мой поисковый запрос ie:
{$and:[{'borough': 'Manhattan','borough': 'Brooklyn','borough': 'Staten Island'},{'cuisine':'Italian'}]}
Что я передаю в функциях find-получения неправильных результатов, и когда я использую точно такой же запрос в MongoShell, результаты хороши.