Как выполнить несколько запросов, чтобы вернуть только одну часть моих данных - PullRequest
0 голосов
/ 20 октября 2019

У меня проблемы с возвратом определенного фрагмента данных в мое MEAN-приложение. Я пытаюсь вернуть только определенную часть моей схемы Мангуста (Счет-фактура) .. В настоящее время я выбираю конкретный счет-фактуру по его идентификатору, затем я пытаюсь проверить, содержит ли счет-фактуру "invoiceType" внутри вложенного массиваэто равно конкретному параметру.

Я пытался использовать find ({'_ id': userId}, {'services.serviceType': 'one'}), но это возвращает оба типа сервиса, независимо от того,serviceType один или два.

// This is my array.. I'm trying to return the serviceType and serviceDescription if serviceType is equal to 'one'
{
   'id': number,
   'fistName': string,
   'services': [
     'serviceType': string
     'serviceDescription': string
  ]

 }

// here is my express code where i'm trying to make the call

Invoice.find({'_id': invoice_id},{'services.serviceType': 'one'})
     .then(invoice => {

         res.json(invoice)

     });

1 Ответ

0 голосов
/ 20 октября 2019

Вам нужно использовать $ elemMatch, поэтому ищите внутренний массив следующим образом:

Invoice.findOne({ '_id': invoice_id }, { 'services': { $elemMatch: { "serviceType": "one" } } })
  .then(invoice => {
    res.json(invoice)
  })
  .catch(err => {
    console.log(err);
    return res.status(500).send("someting went wrong");
  });

И если вы хотите отфильтровать другие типы serviceTypes из ответа, вы можете отфильтровать их следующим образом:

Invoice.findOne({ '_id': invoice_id }, { 'services': { $elemMatch: { serviceType: "one" } } })
  .then(invoice => {
    if (!invoice) {
      return res.status(404).send("Not found");
    }

    let filteredServiceTypes = res.services.filter(s => s.serviceType === "one");
    invoice.services = filteredServiceTypes;

    return res.json(invoice);
  }).catch(err => {
    console.log(err);
    return res.status(500).send("someting went wrong");
  });

...