Mongoose - find () - основанный на переменной - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь найти записи на основе параметра, переданного моему экспрессу.

Я хочу найти все документы в коллекции, и, если параметр присутствует, я хочу найти документы на основеparam.

Я знаю, что я даже не близко к праву, но это работает.Я просто хочу знать, как правильно это сделать.

Что у меня есть:

const offset = 0;
const limit = 10;
const itemName = req.query.itemName;

let searchQuery = '';
if(itemName && itemName !== 'undefined' && itemName !== ''){
    searchQuery = { item: { "$regex": String(itemName), "$options": "i" }}
} else {
    searchQuery = { userRef: String(id) };
};

return MyModel
.find(searchQuery)
.limit(limit)
.skip(offset)
.then(result => {
    res.status(200).json({ result: result })
} 

РЕДАКТИРОВАТЬ: Проблема, с которой я сталкиваюсь, заключается в том, что, если я хочу добавить больше поисказапросы, и, возможно, объединить более одного запроса.Я еще немного покопался, подумал, что, может быть, мне стоит собрать результаты.

1 Ответ

0 голосов
/ 25 марта 2019

Хорошо, значит, я нашел решение.

Мне пришлось использовать оператор mongoose $and и $or.

Мой окончательный код выглядит так:

MyModel.find({
        $and: [
            { ref: mongoose.Types.ObjectId(id) },
            { $and: [
                { query1: { $regex: String(query1), $options: "i" }  },
                { query2: { $regex: String(query2), $options: "i" }  },
                { query3: { $regex: String(query3), $options: "i" }  }
            ]}
        ]
    })

Итак, теперь все поля ищутся при вызове API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...