Возврат только указанных пользователем столбцов на основе заданных пользователем фильтров - PullRequest
0 голосов
/ 12 октября 2018

Я абсолютно новичок в JavaScript и мне было поручено следующее.

Среда: node.js, express, mongodb, mongoose.

Скажем, DB / collection (s) содержат 1000 строк, а каждая строка содержит 50 столбцов.Строка может иметь нулевые значения для определенных столбцов.

Пользователь может ввести определенные фильтры - например, столбец 10, 20 - {'fruit': 'apple', 'price': '$ 20'}.На основе этих фильтров выбираются строки.Но когда ответ дошел до пользователя, отображаются не все столбцы (50 из них).У пользователя есть возможность выбрать столбцы, и только выбранные отображаются.Например, пользователь отправляет запрос с фильтрами выше и column_selected как 5, 9, 21, 40. Максимальное количество фильтров - 7 (пользователь может, например, выбрать только 1 из 7) и любое количество столбцов.(может быть 1, может быть все 50).Запрос должен быть отправлен как «почтовый» запрос.Мне дали следующий код (для columns_selected), но он не возвращает никаких данных.Я написал часть «фильтров» кода, и это тоже не работает.Я также включил образец объекта запроса.Любая помощь будет оценена.После того, как я подвергся JS, у меня даже нет правильного направления для решения этой проблемы.

объект запроса:

объект запроса:

{
               "filters": {
                               "a": "b",
                               "c": "d",
                               "3": "abc",
                               "d": "r"
               },
               "column_selected": ["a",
                               "ab",
                               "sw",
                               "ff",
                               "gg"
               ],
               "view_name": "my_view"
}

объект ответа:

Объект ответа:

{
               "user_views": [{
                                              "filters": {
                               "a": "b",
                               "c": "d",
                               "3": "abc",
                               "d": "r"
               },

                                               "column_selected": ["a",
                               "ab",
                               "sw",
                               "ff",
                               "gg"],
                                               "view_name": "my_view"
                               },
{
                                               "filters": {
                                   "a": "b",
                                   "c": "d",
                                   "3": "abc",
                                   "d": "r"
                   },
                                               "column_selected": ["a",
                                   "ab",
                                   "sw",
                                   "ff",
                                   "gg"],
                                               "view_name": "my_view2"
                               }]}

Код для выбранного столбца

const express = require("express");
const url = require("url");
const router = express.Router();
const Data = require("../../models/Data");
const numberOfRecords = 1000;

router.post("", (req, res) => {
  columnsSelected = req.body.columnSelected;
  console.log(columnsSelected);

  var reqColumns = {};
  for (each of columnsSelected) reqColumns[each] = 1;
  reqColumns["_id"] = 0;

  // Data.find(req.body.filters, reqColumns)
  Data.find({}, reqColumns)
    .skip(req.body.noRows * req.body.pageNumber)
    .limit(req.body.noRows)
    .then(data => {
      console.log("in success");
      return res.json({ data: data });
    })
    .catch(err => {
      console.log("in error");
      return res.send(err);
    });
});

module.exports = router;

Код для фильтров:

const express = require("express");
//const url = require("url");
//const router = express.Router();
const router = require('express').Router();
const Data = require("../../models/Data");
//const numberOfRecords = 1000;

router.get("/getData", function(req, res) {
var filtersSelected = req.body.filters;

  Data.collection('getData').find({}, filtersSelected)
    .then(data => {
      console.log("in success");
      return res.json({ data: data });
    })
    .catch(err => {
      console.log("in error");
      return res.send(err);
    });
}); 

1 Ответ

0 голосов
/ 18 октября 2018

Решено с помощью комментария @dnickless выше.Две важные вещи, которые нужно иметь в виду.Функция find принимает два аргумента - filters и projection columns.Отправленный запрос должен иметь правильный формат - в моем случае это был application/json.

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