mon goose .find () возвращает пустой массив с запрашиваемым результатом - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужно найти мои данные, которые соответствуют определенному типу. Скажем, у меня есть массив объектов в моей БД, каждый объект имеет leadType : all или leadType: blacklist. Каждый объект имеет различный вид leadType значения, связанного с ним.

Я хочу получить полные данные, соответствующие конкретному типу leadType, например leadType: 'radar'.

Я попытался использовать следующий запрос, но наряду с соответствующими документами он также возвращает пустые документы который не соответствует указанной проекции.

Это то, что я пытался:

exports.leads_by_type = (req, res) => {
  const { lead_type } = req.body;
  Lead.find({}, { leads: { $elemMatch: { leadType: lead_type }}} )
    .then(data => {
      if (!data || data.length === 0) {
        return res.status(404).json({ message: "No data found" });
      }
      res.status(200).json({ message: "Data found", data });
    })
    .catch(err => res.status(500).json({ err }));
};

и возвращает мне вывод следующим образом:

{
  "message": "Data found",
  "data": [
      {
          "_id": "5e83427079f7611bdc1e48a0",
          "leads": [
              {
                  "education": {
                      "school": "happy kids corner",
                      "graduation": "some school"
                  },
                  "currentPosition": {
                      "title": "Salesforce developer",
                      "endDate": "currently working",
                      "employmentType": "full-time",
                      "industry": "information technology"
                  },
                  "location": {
                      "state": "delhi",
                      "country": "india"
                  },
                  "leadType": "radar",
                  "name": "Ben",
                  "mobile": 1524524678,
                  "_id": "5e83427079f7611bdc1e489e"
              }
          ]
      },
      {
          "_id": "5e84cb4fb59fdd1644e7c226",
          "leads": [
              {
                  "education": {
                      "school": "happy kids corner",
                      "graduation": "some school"
                  },
                  "currentPosition": {
                      "title": "Salesforce developer",
                      "endDate": "currently working",
                      "employmentType": "full-time",
                      "industry": "information technology"
                  },
                  "location": {
                      "state": "delhi",
                      "country": "india"
                  },
                  "leadType": "radar",
                  "name": "joey",
                  "mobile": 1524524678,
                  "_id": "5e84cb4fb59fdd1644e7c224"
              }
          ]
      },
      {
          "_id": "5e84cb70b59fdd1644e7c229",
          "leads": []
      },
      {
          "_id": "5e84cb88b59fdd1644e7c22c",
          "leads": []
      },
      {
          "_id": "5e84cbb7b59fdd1644e7c232",
          "leads": []
      },
      {
          "_id": "5e84cbd9b59fdd1644e7c235",
          "leads": [
              {
                  "education": {
                      "school": "happy kids corner",
                      "graduation": "some school"
                  },
                  "currentPosition": {
                      "title": "Salesforce developer",
                      "endDate": "currently working",
                      "employmentType": "full-time",
                      "industry": "information technology"
                  },
                  "location": {
                      "state": "delhi",
                      "country": "india"
                  },
                  "leadType": "radar",
                  "name": "rhea",
                  "mobile": 1524524678,
                  "_id": "5e84cbd9b59fdd1644e7c234"
              }
          ]
      }
  ]
}

Пожалуйста, помогите мне чтобы исправить, удалите эти пустые объекты из вывода данных

Редактировать: Добавление скриншота моей БД: enter image description here

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

find({ leads: { $elemMatch: { leadType: lead_type }}} )

Вы можете попробовать приведенный выше запрос.

{} вы использовали пустой объект вместе с вашим условием поиска, которое является причиной root за извлеченными пустыми данными.

1 голос
/ 02 апреля 2020

Если вы хотите сопоставить только документы с leadType равным radar, вы должны указать это в условие поиска .

 exports.leads_by_type = (req, res) => {
  const { lead_type } = req.body;
  Lead.find({ 'leads.leadType': lead_type })
    .then(data => {
      if (!data || data.length === 0) {
        return res.status(404).json({ message: "No data found" });
      }
      res.status(200).json({ message: "Data found", data });
    })
    .catch(err => res.status(500).json({ err }));
};

all leads in my collection

with the condition

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