我对JavaScript绝对陌生,并且对以下内容有所了解。
环境是node.js,express,mongodb,mongoose。
说,数据库/集合包含1000行,每行有50列。对于某些列,一行可能具有空值。
用户可以输入某些过滤器-例如,第10、20列-{'fruit':'apple','price':'$ 20'}。基于这些过滤器,选择行。但是,当响应到达用户时,不会显示所有列(其中50列)。用户可以选择列,仅显示那些列。例如,用户发送的请求带有上面的过滤器,并且column_selected为5、9、21、40。过滤器的最大数量为7(例如,用户可以选择7个中的1个)和任意数量的列(可能是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"
}
响应对象:
Response_object:
{
"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"
}]}
针对column_selected的代码
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);
});
});
答案 0 :(得分:0)
借助@dnickless的上述注释解决了该问题。要记住的两个重要事项。 find
函数采用两个参数-filters
和projection columns
。发送的请求必须具有正确的格式-在我的情况下为application/json
。