Установите настраиваемое поле в качестве аргумента для .find () в mongoose - PullRequest
0 голосов
/ 30 января 2019

Я делаю HTTP-вызов в мой API для извлечения документов из mongodb, и в URL у меня есть два параметра: campo и ключевая фраза .Я хочу поискать все документы, для которых для параметра campo установлено значение keyphrase .Например: у меня есть несколько таких документов в моем монго:

classe: "4AT"
cognome: "XYZ"
email: "xyz.zyx@gmail.com"
idreg: "IUDQFEXFFR4DW133"
nome: "Francesco"
turni: ["g2t1", "g1t2", "g3t2"]
__v: 0
_id: "5c508d0b4810fc0ece8df2a9"

Я называю GET "localhost: 3000 / nome / Francesco", и я хочу выбрать все документы со значением "Francesco" в поле "нома».Но проблема в том, что метод .find () принимает такие параметры, как:

.find({nome: keyphrase})

, а не динамические заголовки, как я хочу.Есть ли шанс сделать это?

PS: мой экспресс-код для запроса на получение, если он помогает:

app.get("/api/ragazzi/:campo/:keyphrase",(req, res, next) => {
  let campo = req.params.campo.toLowerCase();
  let keyphrase = req.params.keyphrase;
  Ragazzo.find({campo : keyphrase})
    .then(documents =>{
      res.status(200).json({
        codice: "ok",
        risultato: documents
      });
    })
    .catch((err)=>{console.log(err);});
});

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Если вы хотите сделать запрос на основе значения campo и ключевой фразы, то заранее создайте объект и используйте его в качестве запроса

app.get("/api/ragazzi/:campo/:keyphrase",(req, res, next) => {
  let campo = req.params.campo.toLowerCase();
  let keyphrase = req.params.keyphrase;
  let query = {};
  query[campo] = keyphrase
  Ragazzo.find(query)
    .then(documents =>{
      res.status(200).json({
        codice: "ok",
        risultato: documents
      });
    })
    .catch((err)=>{console.log(err);});
});
0 голосов
/ 30 января 2019

Попробуйте

.find({ [campo] : keyphrase})
...